Aman Kumar Sinha
Aman Kumar Sinha

Reputation: 427

Not able to set keepAliveTime config for Hikari in SpringBoot

I have an spring-boot based application that connects to postgres DB. It uses the default HikariCP as JDBC connection pool. From the documentation I see that we can configure a property keepALiveTime which I think is useful to us but I am not able to set it in my yml file. It looks like this

datasource:
    jdbc-url: jdbc:postgresql://x.x.x.x:5433/xxx?sslmode=require&sslcert=/file.crt&sslkey=/tmp/file.key
    username: ${JDBC_USERNAME}
    password: ${JDBC_PASSWORD}
    keepaliveTime: 80000
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true
      properties:
        hibernate.format_sql: true
        hibernate.dialect: org.hibernate.dialect.PostgreSQL81Dialect
    hikari:
      idle-timeout: 500000
      minimum-idle: 10
      maximum-pool-size: 15
      keepaliveTime: 80000
      max-lifetime: 48000
      connection-timeout: 180000

All other configs are auto suggested and are able to be used. But keepAliveTime option is not available for me to populate. Although I am providing it in the configs Hikari doesn't use it.

Upvotes: 1

Views: 12696

Answers (2)

Aman Kumar Sinha
Aman Kumar Sinha

Reputation: 427

keepAliveTime parameter arrived in HikariCP 4.0.0. In order to use it with older version of spring boot - we can exclude the HikariCP dependency from where it is being read and explicitly the version that we want. Its not recommended but I found no issues using 4.0.0 version with spring boot version 2.3.0-Release

To remove the dependency

implementation('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude group: 'com.zaxxer', module: 'HikariCP'
  }

To add the dependency

 implementation('com.zaxxer:HikariCP:4.0.3') {
    force=true
  }

I added the keepAliveTime in DataSource Configuration file

 public HikariDataSource dataSource() {
        HikariDataSource h =  DataSourceBuilder.create().type(HikariDataSource.class).build();
        System.out.println(h.getJdbcUrl());
        h.setKeepaliveTime(100000l);
        h.setJdbcUrl("yufuyfuyfu");
        System.out.println(h.getJdbcUrl());
        return h;
    }

Upvotes: 2

MuhammedH
MuhammedH

Reputation: 402

please notice that keepAliveTime should be less than maxLifeTime, from HikariCP docs:

This property controls how frequently HikariCP will attempt to keep a connection alive, in order to prevent it from being timed out by the database or network infrastructure. This value must be less than the maxLifetime value

Upvotes: 0

Related Questions