默认数据源 HikariDataSource
配置文件
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: ${mysql.username}
password: ${mysql.password}
url: jdbc:mysql://${mysql.url}/${mysql.dbname}?characterEncoding=utf-8&useSSL=false
type: com.zaxxer.hikari.HikariDataSource #数据源类型
hikari:
pool-name: DatebookHikariCP #连接池名称。默认HikariPool-1
auto-commit: true
minimum-idle: 5 # 允许的最小空闲数。默认值10。小于0或大于maximum-pool-size,都会重置为maximum-pool-size
maximum-pool-size: 15 # 连接池最大连接数。默认值10。小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
idle-timeout: 30000 # 空闲超时,空闲超时的连接会被关闭,直到超时的空闲连接数达到 minimum-idle的值。默认值600000ms(10分钟)。大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
max-lifetime: 180000 # 最长生命周期,使用中的连接永远不会退役,只有当它关闭时才会被删除。默认30分钟。不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
connection-timeout: 30000 # 连接的超时时间。默认值30秒。小于250毫秒,否则被重置为默认值30秒
connection-test-query: SELECT 1 # 测试连接是否可用的query语句。在oracle是select 1 from dual
mysql 超时时间设置
1、重启一下mysql永久生效
编辑 /etc/my.cnf,在mysqld 下 新增 timeout参数(s)
【mysqld】
wait_timeout=2100
interactive_timeout=2100
2、及时生效,重启后失效
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
set global wait_timeout=2100; //服务器关闭非交互连接之前等待活动的秒数。
SET GLOBAL interactive_timeout=2100; // 服务器关闭交互式连接前等待活动的秒数。
配置连接池内连接的生存周期小于mysql设置的wait_timeout 的值。
参考:
阿里巴巴DruidDataSource
自动配置
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
配置
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 数据库连接池类别
druid:
initial-size: 5 # 初始化大小
min-idle: 10 # 最小连接数
max-active: 20 # 最大连接数
max-wait: 60000 # 获取连接时的最大等待时间
min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒
time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒
filters: stat,wall # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计
validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效
test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能
test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能
test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能
stat-view-servlet:
enabled: true # 是否开启 StatViewServlet
allow: 127.0.0.1 # 访问监控页面 白名单,默认127.0.0.1
deny: 192.168.56.1 # 访问监控页面 黑名单
login-username: admin # 访问监控页面 登陆账号
login-password: admin # 访问监控页面 登陆密码
filter:
stat:
enabled: true # 是否开启 FilterStat,默认true
log-slow-sql: true # 是否开启 慢SQL 记录,默认false
slow-sql-millis: 5000 # 慢 SQL 的标准,默认 3000,单位:毫秒
merge-sql: false # 合并多个连接池的监控数据,默认false
配置属性:DruidDataSource配置属性列表 · alibaba/druid Wiki · GitHub
validationQuery的值配置:
数据库 | validationQuery |
Oracle | select 1 from dual |
MySQL | select 1 |
监控页面:http://IP:端口号/服务名/druid/index.html访问监控中心
手动配置
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
配置
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 数据库连接池类别
initial-size: 5 # 初始化大小
min-idle: 10 # 最小连接数
max-active: 20 # 最大连接数
max-wait: 60000 # 获取连接时的最大等待时间
min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒
time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒
filters: stat,wall,slf4j # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计
validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效
test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能
test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能
test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能
配置类
@Configuration
public class MyDataSourceConfig {
//默认的自动配置是判断容器中没有定义数据源,才会自动配置HikariDataSource的数据源
//将dataSource与配置文件中的属性进行绑定
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
/**
* 配置druid的监控页功能
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(statViewServlet,"/druid/*");
initParams.put("loginUsername","admin");
initParams.put("loginPassword","123456");
initParams.put("allow","");//默认允许所有访问
initParams.put("deny","192.168.1.7");//
registrationBean .setInitParameters(initParams);
return registrationBean;
}
}