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的时候,创建连接池。
Spring Boot 2.1.5中,HikariCP连接池不会自动初始化。这意味着在启动应用程序时,您需要手动配置和初始化HikariCP连接池。 要使用HikariCP连接池,您首先需要在您的项目中添加相关的依赖。在应用的pom.xml文件中,引入以下依赖: ``` <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency> ``` 完成依赖的添加后,您还需要在应用的配置文件中进行HikariCP连接池的配置。比如,在application.properties或application.yml文件中添加以下配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.hikari.connection-test-query=SELECT 1 ``` 在上述配置中,您需要根据自己的数据库配置修改相应的参数。另外,connection-test-query是一个可选的配置,用于指定测试连接是否有效的SQL查询语句。 完成配置后,在您的应用程序中使用@Autowired或@Bean注解来注入或创建HikariDataSource bean。例如: ``` @Autowired private DataSource dataSource; ``` 或 ``` @Bean public DataSource dataSource() { return new HikariDataSource(); } ``` 通过以上步骤,您就可以在Spring Boot 2.1.5中成功初始化和使用HikariCP连接池。记得在应用程序启动时检查日志输出,以确认连接池是否正常初始化。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值