Hikaripool JPARepository 在数据库 Mysql 重启后没有 reconnect/recreate 连接

Hikaripool JPARepository not reconnect/recreate connections after database Mysql restart

我正在使用 SpringBoot 2.2.10、Hikari 来管理连接池并使用 JPA 从数据库中查询 Mysql 以创建微服务。有一个测试场景,我的微服务应该在数据库 restart/reboot 之后运行,但没有成功。我确实尝试在互联网和 SO 上找到解决方案,并且有很多类似的问题,甚至几年前就有人问过,但我完全是个菜鸟,因为没有一个适合我的情况。下面是我的配置和堆栈跟踪

spring.datasource.jdbcUrl=jdbc:mysql://xxx.xxx.xxx.xxx:3306/core
spring.datasource.username=admin
spring.datasource.password=1
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.maximumPoolSize=10
spring.datasource.idleTimeout=30000
spring.datasource.maxLifeTime=1800000
spring.datasource.connectionTestQuery=SELECT 1 FROM DUAL

和我的数据源配置 class:

@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class HikariCoreConfig extends HikariConfig {

     @Bean
     @public DataSource dataSource() {
         return new HikariDataSource(this);
     }
}

在启动时,我的应用程序工作正常,从 db 正常读取和写入。在我杀死然后再次启动数据库进程后,每当我写入数据库(使用 repository.save(object))时,我都会不断收到异常:

CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is ...JDBCConnectionException: Unable to acquire JDBC Connection

(我保证 mysql 是 运行,我可以从我的本地计算机通过 Workbench 连接和查询)

这里是完整的堆栈跟踪

(抱歉我无法提供文字)

我在互联网上阅读了很多网站,人们说 Hikari 会自动处理重新连接的事情。我做错了还是错过了什么?请帮忙,谢谢!

我发现了问题。 Hikari 确实重新连接,我的所有配置都已正确设置。我的情况发生在我使用 :

在系统 属性 中设置 keystore/truststore
   System.setProperty("javax.net.ssl.keyStore", keyStorePath);
   System.setProperty("javax.net.ssl.keyStorePassword", kspassword);

   System.setProperty("javax.net.ssl.trustStore", trustStorePath);
   System.setProperty("javax.net.ssl.trustStorePassword", tspassword);

它使数据库重启后连接不可用。解决方案是在 jdbcurl 中简单地放置两个参数: &useSSL=false&allowPublicKeyRetrieval=true:

   spring.datasource.jdbcUrl=jdbc:mysql://xxx.xxx.xxx.xxx:3306/core?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true

那就行了。