我们直接进入主题。
通常情况下,我们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个相关的解决方案
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的时候,创建连接池。