SpringBoot启动时HikariCP不创建连接池问题解决方案

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

你可能感兴趣的:(iSpring)