首先吐槽下druid的維護芜飘,issue都2.4K了,阿里也不做處理磨总。許多要命的配置文檔里也沒有提及嗦明,而且這些配置有的互相有影響。
一舍败、情景描述
springboot+mysql的一般項目招狸,項目啟動后敬拓,mysql服務器宕機,mysql重啟后裙戏,springboot應用卻還是無法獲得數(shù)據(jù)庫連接
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 any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1644)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1710)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2777)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
此時的druid配置
spring:
datasource:
druid:
fail-fast: true #快速失敗乘凸,這個參數(shù)設置true,否則連接失敗會不斷重試累榜,接口請求超時
二营勤、數(shù)據(jù)庫重啟,連接池自愈
修改配置如下:
spring:
datasource:
druid:
break-after-acquire-failure: false #這是關鍵
connection-error-retry-attempts: 10 #嘗試次數(shù)
fail-fast: true
time-between-connect-error-millis: 10000
break-after-acquire-failure:
true表示失敗后斷開,后期數(shù)據(jù)庫恢復也不自動連接;
false表示失敗后不斷開, 新的請求都會嘗試重新創(chuàng)建連接壹罚。默認為false