Spring Boot不支持Hikari keepaliveTime配置 2.1.12版本如何传参
Spring Boot 2.1.12配置HikariCP keepaliveTime的实现方案
Spring Boot 2.1.x版本的自动配置属性类没有对HikariCP的keepaliveTime参数做映射,直接在配置文件中写spring.datasource.hikari.keepalive-time不会生效。而Spring Boot 2.1.12默认依赖的HikariCP 3.4.1版本本身已经支持该参数,你可以通过以下两种方式手动注入配置:
方法一:使用HikariDataSourceCustomizer(推荐)
该方式无需修改Spring Boot自动配置的数据源逻辑,仅通过定制器追加配置,对原有业务配置无侵入:
import com.zaxxer.hikari.HikariDataSource; import org.springframework.boot.autoconfigure.jdbc.HikariDataSourceCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; @Configuration public class HikariCustomConfig { @Bean public HikariDataSourceCustomizer hikariKeepaliveConfigurer() { return hikariDataSource -> { // 示例设置keepaliveTime为60秒,可按需调整时间 hikariDataSource.setKeepaliveTime(TimeUnit.SECONDS.toMillis(60)); }; } }
注意:
setKeepaliveTime方法接收的参数单位为毫秒,可通过TimeUnit工具类快速转换不同时间单位的数值。
方法二:自定义DataSource Bean
如果需要同时修改多个Hikari原生未被Spring Boot映射的配置项,可以直接自定义数据源Bean接管全部配置:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.concurrent.TimeUnit; @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") public DataSource dataSource() { HikariConfig config = new HikariConfig(); // 手动设置keepaliveTime参数 config.setKeepaliveTime(TimeUnit.SECONDS.toMillis(60)); return new HikariDataSource(config); } }
说明:
@ConfigurationProperties注解会自动读取配置文件中spring.datasource.hikari前缀的所有配置,手动设置的参数会作为补充配置生效。
验证配置是否生效
可以通过添加启动验证类打印参数,确认配置是否正确注入:
import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class HikariConfigChecker implements CommandLineRunner { @Autowired private HikariDataSource dataSource; @Override public void run(String... args) throws Exception { System.out.println("Hikari keepaliveTime配置值:" + dataSource.getKeepaliveTime() + "ms"); } }
启动应用后查看控制台输出的毫秒值,和你设置的数值一致即代表配置生效。
注意事项
keepaliveTime的取值必须小于maxLifetime的取值,否则HikariCP启动时会抛出参数非法异常,官方建议两者差值至少在30秒以上。- 如果你的项目手动指定了低于3.3.0的HikariCP版本,需要先升级到3.3.0及以上版本才能支持
keepaliveTime参数。
内容的提问来源于stack exchange,提问作者DEEPAK GUPTA
相关产品推荐
相关产品推荐

