数据库连接池

最近在卷连接池检视,记录一下,方便自己查
因为有的数据库和服务跨机房,网关会回收连接池,连接池以为自己还活着,导致故障很多
主要减少链接空闲存活时间,回收掉得了

druid

spring:
  jpa:
    database: mysql
    show-sql: true
#    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
      ddl-auto: update
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # com.mysql.jdbc.Driver
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://47.103.117.202:3306/pms?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    username: bbtang
    password: bbtangPassw4!
    druid:
      #     配置初始化大小、最小、最大线程数
      initialSize: 5
      minIdle: 5
      #     CPU核数+1,也可以大些但不要超过20,数据库加锁时连接过多性能下降
      maxActive: 20
      #     最大等待时间,内网:800,外网:1200(三次握手1s)
      maxWait: 6000
      timeBetweenEvictionRunsMillis: 60000
      #     配置一个连接在池中最大空间时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      #     设置从连接池获取连接时是否检查连接有效性,true检查,false不检查
      testOnBorrow: true
      #     设置从连接池归还连接时是否检查连接有效性,true检查,false不检查
      testOnReturn: true
      #     可以支持PSCache(提升写入、查询效率)
      poolPreparedStatements: true
      #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,log4j
      #     保持长连接
      keepAlive: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

hikari

spring:
  jpa:
    database: mysql
    show-sql: true
#    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
      ddl-auto: update
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    # com.mysql.jdbc.Driver
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://47.103.117.202:3306/pms?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    username: bbtang
    password: bbtangPassw4!
    hikari:
      # 连接池的名称
      pool-name: hello1
      # 从池返回的连接的默认自动提交行为,默认值:true
      auto-commit: true
      # 最小空闲连接数量,cpu数量*2+磁盘数量,如4C8G的机器,可配4*2+2 = 10
      # 最佳实践:保持缺省(跟maximumPoolSize相同),让连接池固定大小,避免扩缩容带来的性能影响
      minimum-idle: 10
      # 连接池最大连接数,默认是10,不建议超过minimum5倍,所有服务的和不能大于数据库连接池数量
      maximum-pool-size: 25
      # 控制空闲连接的在池中最大的空闲时间,配置为0时表示空闲连接永远不逐出
      # 缺省:600000ms;最小生效值:10000ms
      # 如果idle_timeout +1>max_LifeTime,且idle-timeout>0,会被重置为0
      idle-timeout: 60000
      # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      # 超过该时间强制逐出,连接池向数据申请新的连接进行补充
      # 强烈建议设置该属性,可设置的比数据库或网络基础设施允许的最大连接时间小一些。
      # 如数据库连接最大失效时间是8小时,可设置为4小时。
      max-lifetime: 1800000
      # 数据库连接超时时间,默认30秒,即30000,建议调小一点2s
      connection-timeout: 2000
      # 驱动支持JDBC4不需要设置,反之需要配置;
      # MYSQL: select 1; Oracle: select 1 from dual
      connection-test-query: SELECT 1
      # 用于跟数据库保持心跳连接,防止底层网络基础设施超时断开,定期验证连接的有效性。
      # 这个参数需要设置的比maxLifetime(连接最大生存时间,下文会介绍)小
      # 如果当前支持JDBC4 , 通过调用isValid()方法实现,从池中取出一个连接,执行“ping”,成功后再放回
      # 否则执行connectionTestQuery属性(下文会介绍)指定的sql
      keepalive_time: 60000

你可能感兴趣的:(数据库)