springboot hikari连接池连接mysql失败现象
背景
主要分析服务在mysql宕机(或因其他原因连不上)的情况下会有什么表现
框架:springboot 2.4.6 + mybatis 3.5.6 + hikari + mysql
现象
静态类型数据源
-
服务启动时,数据库无法访问,启动时服务不会抛出异常,只会在访问数据库时才会抛出异常;数据库恢复后,服务无需重启即可恢复正常
-
服务正常运行一段时间后,数据库无法访问,如果涉及到数据库的操作,会抛出异常;数据库恢复后,服务无需重启即可恢复正常
动态类型数据源
通过DatabaseIdProvider区分数据库类型,绑定不同的sql语句时,会发生以下现象
- 服务启动时,数据库无法访问,服务主线程能启动,但是数据库连接池会初始化失败,报错如下
2021-04-29 17:08:53.404 [main] ERROR com.zaxxer.hikari.pool.HikariPool - DatebookHikariCP - Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received