文章目录
druid常见问题在GitHub地址
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
配置参数
单独使用druid的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# druid配置
# 连接池初始化时创建的连接数
initialSize: 3
# 连接池中最大连接数
maxActive: 50
# 连接池中最小空闲连接数
minIdle: 5
# 连接池中最大空闲连接数
maxIdle: 10
# 获取连接时的最大等待时间(毫秒),如达到最大连接,且所有连接被使用,获取时等待的超时时间
maxWait: 60000
# 间隔多久检测一次空闲连接是否有效(毫秒)
timeBetweenEvictionRunsMillis: 60000
# 连接池中连接最小空闲时间(毫秒),连接池中的连接被销毁的条件,连接数 > minIdle && 空闲时间 > minEvictableIdleTimeMillis
minEvictableIdleTimeMillis: 300000
# 连接池中连接最大空闲时间(毫秒),连接池中的连接被销毁的条件,空闲时间 > maxEvictableIdleTimeMillis,不管连接池中的连接数是否小于最小连接数
maxEvictableIdleTimeMillis: 25200000
# 用于检测连接是否有效的SQL语句
validationQuery: SELECT 1
# 是否开启空闲连接的检测,作用类似testOnBorrow
testWhileIdle: true
# 是否开启连接的检测功能,在获取连接时检测连接是否有效,开启会获取连接时先执行下validationQuery配置的语句看连接是否有效,所以会影响性能,
testOnBorrow: false
# 是否开启连接的检测功能,在归还连接时检测连接是否有效,此参数必须和testOnBorrow同时设置为true当服务端关闭,客户端才不会报错
testOnReturn: false
# 是否缓存PreparedStatement对象
poolPreparedStatements: true
# 缓存PreparedStatement对象的最大数量
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计用的filter,允许监控统计
filters: stat
# 配置扩展属性,用于监控统计分析SQL性能等
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
注意:避免数据库单方面关闭连接,可查询mysql:show variables like ‘%timeout%’;,单位为秒
关注interactive_timeout和 wait_timeout,默认为8个小时,解决办法
minEvictableIdleTimeMillis < maxEvictableIdleTimeMillis && maxEvictableIdleTimeMillis + timeBetweenEvictionRunsMillis < 服务端的wait_timeout
- testWhileIdle:配置此参数猜测是只是将超出空闲时间的连接销毁,销毁后如果连接池中小于最小连接数甚至没有连接后不会立马创建连接,而是使用时创建连接,因为通过
SHOW PROCESSLIST;
查看当mysql服务端关闭所有客户端连接后,且过了timeBetweenEvictionRunsMillis的时间服务端还是没有看到新的连接,只有再次查询使用时才创建了一个连接,也不是创建了minIdle个连接
配置类,配置了此类才会用配置的参数,否则是druid默认的参数值
package druid.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfiguration {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}