springboot数据库连接池

默认数据源 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 的值。 

参考:https://www.cnblogs.com/mracale/p/9903318.html

 阿里巴巴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
Oracleselect 1 from dual
MySQLselect 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;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值