解决数据库连接池HikariCP问题

解决HikariCP的com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure的问题

om.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

servicename:bc-checkup message:2022-03-16 16:01:19.928 [Thread-42] WARN com.zaxxer.hikari.HikariConfig - HikariPool-38 - idleTimeout has been set but has no effect because the pool is operating as a fixed size pool. fields.host:10.161.51.246 log_type:wallet-bc-dw host.name:ip-10-161-51-246.ap-southeast-1.compute.internal @version:1 @timestamp:Mar 16, 2022 @ 16:01:19.959 _id:Fhe-kX8BCBBWjK6M5MOX _type:doc _index:wallet-bc-dw-logs-2022.03.11 _score: -

配置以下参数

    db-minimum-idle: 5
    db-maximum-pool-size: 10
    db-max-lifetime: 60000
    db-idle-timeout: 60000
    db-connection-timeout: 60000
    db-validation-timeout: 3000

java代码

public class DatabaseSourceServiceImpl implements DatabaseSourceService, BeanFactoryAware {
    @Value("${bc.mybatisplus.db-minimum-idle}")
    private Integer minimumIdle;

    @Value("${bc.mybatisplus.db-maximum-pool-size}")
    private Integer maximumPoolSize;
    @Value("${bc.mybatisplus.db-max-lifetime}")
    private Integer maxLifetime;

    @Value("${bc.mybatisplus.db-idle-timeout}")
    private Integer idleTimeout;

    @Value("${bc.mybatisplus.db-connection-timeout}")
    private Integer connectionTimeout;

    @Value("${bc.mybatisplus.db-validation-timeout}")
    private Integer validationTimeout;

    @Override public void addDataSource(String datasourceName) {
            //.....

            if (dbSource.getMinimumIdle() == null || dbSource.getMinimumIdle().intValue() <= 0) {
                dbSource.setMinimumIdle(minimumIdle); //从nacos取
            }
            configuration.setMinimumIdle(dbSource.getMinimumIdle());

            if (dbSource.getMaximumPoolSize() == null || dbSource.getMaximumPoolSize() <= 0) {
                dbSource.setMaximumPoolSize(maximumPoolSize);   //从nacos取
            }
            configuration.setMaximumPoolSize(dbSource.getMaximumPoolSize());

            if (dbSource.getMaxLifetime() == null || dbSource.getMaxLifetime() <= 0) {
                dbSource.setMaxLifetime(maxLifetime);  
            }
            configuration.setMaxLifetime(dbSource.getMaxLifetime());

            if (dbSource.getIdleTimeout() == null || dbSource.getIdleTimeout() <= 0) {
                dbSource.setIdleTimeout(idleTimeout);   
            }
            configuration.setIdleTimeout(dbSource.getIdleTimeout());

            if (dbSource.getConnectionTimeout() == null || dbSource.getConnectionTimeout() <= 0) {
                dbSource.setConnectionTimeout(connectionTimeout); 
            }

            configuration.setConnectionTimeout(dbSource.getConnectionTimeout());
            configuration.setConnectionTestQuery("SELECT 1");
            configuration.setValidationTimeout(validationTimeout);
            configuration.setAllowPoolSuspension(true);
            //configuration.setRegisterMbeans(true);
            configuration.setPoolName(datasourceName + "-Hikari-POOL");
            HikariDataSource dataSource = new HikariDataSource(configuration);
            try {
                dataSource.setLoginTimeout(5);
            } catch (SQLException e) {
                log.error(e.getMessage(), e);
            }
            //....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值