我們直接進入主題。
通常情況下,我們SpringBoot項目啟動完成時,HikariCP都會建立連接配接池。
我們在控制台的日志中就能直接看到這個資訊:
com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
但是有些項目,在啟動時,并沒有立即建立連接配接,而是按需建立連接配接。這樣就會導緻,我們資料庫配置一旦有錯誤,我們不能在第一時間發現問題。
查閱一些資料,也有人遇到了相似的問題,通過spring-boot版本降級得到了解決。但我嘗試從2.2.X降級到2.1.X并沒有解決問題。
經過一些讨論,得到了2個相關的解決方案
issue位址:https://github.com/spring-projects/spring-boot/issues/19596
HikariCP本身就是按需建立連接配接,并不會在項目啟動時,直接建立。如果我們想在程式啟動時建立連接配接,SpringBoot相關人員給出了2個方案。
方案一:
@Bean
public ApplicationRunner runner(DataSource dataSource) {
return args -> {
log.info("dataSource: {}", dataSource);
Connection connection = dataSource.getConnection();
log.info("connection: {}", connection);
};
}
我們手動建立一個Bean,啟動時我們強制getConnection,來達到啟動時建立連接配接池的目的。
方案二
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
config.setJdbcUrl("jdbc:mysql://xxx.xxx.xxx.xxx:3306/demos?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai");
config.setUsername("root");
config.setPassword("xxxxxxxxx");
config.setXxx("xxx");
config.setYyy("yyy");
config.setZzz("zzz");
return new HikariDataSource(config);
}
這個需要我們手動建立DataSource,而且是根據HikariConfig來建立,這樣才可以在初始化DataSource的時候,建立連接配接池。