Spring Boot 集成 Druid数据库连接池

为什么需要连接池

参考文章:谈谈数据库连接池的原理

一起来看看原始数据库连接的做法

首先,每一次web请求都要建立一次数据库连接。

建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。

这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。

对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。

该情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。

解决方案

问题的根源就在于对数据库连接资源的低效管理。

我们知道,对于共享资源,有一个很著名的设计模式:资源池(resource pool)。
该模式正是为了解决资源的频繁分配﹑释放所造成的问题。

为解决上述问题,可以采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。

预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。

更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

引入数据库连接池依赖

需要注意mybatis版本与druid的版本要对应上,不然会被坑死!

<dependencies>
    <!-- 阿里巴巴 EasyExcel依赖 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>

    <!-- 数据库,由于mybatis集成druid存在一些问题,版本上需要严格控制,否则会报SQLFeatureNotSupportedException -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.9</version>
    </dependency>

    <!-- mybatis-plus3 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.7.1</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.0.7.1</version>
    </dependency>
</dependencies>

编写配置文件

application.properties

# 初始化时建立物理连接的个数
spring.datasource.druid.initial-size=5
# 最小连接池数量
spring.datasource.druid.min-idle=5
# 最大连接池数量
spring.datasource.druid.max-active=20
# 获取连接时最大等待时间
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
# 用来检测连接是否有效的sql,要求是一个查询语句
spring.datasource.druid.validation-query=SELECT 'x'
# 配置监控页面访问登录名称
spring.datasource.druid.stat-view-servlet.login-username=admin
# 配置监控页面访问密码
spring.datasource.druid.stat-view-servlet.login-password=admin
# 配置监控页面的访问路径(/druid, /druid/login.html ...)
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否开启慢sql查询监控
spring.datasource.druid.filter.stat.log-slow-sql=true
# 慢SQL执行时间
spring.datasource.druid.filter.stat.slow-sql-millis=2000
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connect-properties.=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall,slf4j
# 配置aop路径(top.mocha.easyexcel.service)
spring.datasource.druid.aop-patterns=top.mocha.*.service.*

application.yml

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123465
    type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
  # 指定sql映射文件位置
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

访问Druid监控页面

http://ip地址:项目端口号/druid

跳坑!MyBatis版本与Druid版本不一致问题!

问题描述:(create_time对应的Java字段为LocalDateTime类型)

导出Excel异常!异常原因:[Error attempting to get column 'create_time' from result set.  Cause: java.sql.SQLFeatureNotSupportedException
; null; nested exception is java.sql.SQLFeatureNotSupportedException]

一开始只是使用MyBatis-Plus进行项目集成,但是测试后不行

真的要被这个地方坑死了!找了很久是什么问题,结果原来是因为Mybatis与Druid的版本不一致!

于是手动设置MyBatis以及Druid的版本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值