解決Druid動(dòng)態(tài)數(shù)據(jù)源配置重復(fù)刷錯(cuò)誤日志的問題
Druid動(dòng)態(tài)數(shù)據(jù)源配置 主要是繼承AbstractRoutingDataSource再通過AOP來實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換.
下面給大家介紹Druid動(dòng)態(tài)配置數(shù)據(jù)源重復(fù)刷錯(cuò)誤日志問題,具體內(nèi)容如下所示:
問題描述
功能需求:
使用druid數(shù)據(jù)庫連接池實(shí)現(xiàn) 動(dòng)態(tài)的配置數(shù)據(jù)源功能:IP、端口、用戶名、密碼都是用戶頁面手動(dòng)輸入,可以測試連接,保存數(shù)據(jù)源。
問題說明:
既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯(cuò)誤,連接失敗等情況。
預(yù)期情況:用戶輸入的配置錯(cuò)誤,測試連接時(shí),會(huì)返回連接失敗的信息。
實(shí)際情況:數(shù)據(jù)源測試連接,連接失敗后:
后臺(tái)一直打印錯(cuò)誤信息,一直自動(dòng)重連
方法被阻塞無返回信息,導(dǎo)致前端頁面一直處于等待狀態(tài)
【錯(cuò)誤信息】:
com.alibaba.druid.pool.DruidDataSource-create connection SQLException, url:xxx, errorCode 0, state 08S01
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
【原始代碼】:
public static void getDataSource(DataConfig dataConfig) throws Exception{
try {
Properties properties = new Properties();
properties.setProperty("driverClassName",dataConfig.getDriverClassName());
properties.setProperty("url",dataConfig.getUrl());
properties.setProperty("username",dataConfig.getUserName());
properties.setProperty("password",dataConfig.getPassWord());
DataSource ds = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
解決辦法
【參數(shù)說明】
| 參數(shù) | 解釋 |
|---|---|
| connectionErrorRetryAttempts | 連接出錯(cuò)后再嘗試連接次數(shù) |
| breakAfterAcquireFailure | 數(shù)據(jù)庫服務(wù)宕機(jī)自動(dòng)重連機(jī)制 |
| maxWait | 超時(shí)等待時(shí)間 |
public static void getDataSource(DataConfig dataConfig) throws Exception{
try {
Properties properties = new Properties();
properties.setProperty("driverClassName",dataConfig.getDriverClassName());
properties.setProperty("url",dataConfig.getUrl());
properties.setProperty("username",dataConfig.getUserName());
properties.setProperty("password",dataConfig.getPassWord());
properties.setProperty("maxWait","500");//如果失敗,當(dāng)前的請(qǐng)求可以返回
DruidDataSource druidDataSource = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);
druidDataSource.setConnectionErrorRetryAttempts(0);// 失敗后重連的次數(shù)
druidDataSource.setBreakAfterAcquireFailure(true);//請(qǐng)求失敗之后中斷
DataSource ds = druidDataSource;//如果有需要使用javax.sql.DataSource的話
} catch (Exception e) {
e.printStackTrace();
}
}
踩坑總結(jié)
不要在properties中配置connectionErrorRetryAttempts和breakAfterAcquireFailure,沒有效果

連接失敗的具體錯(cuò)誤信息,catch不到,源碼中已經(jīng)catch了異常信息,做了相關(guān)處理

到此這篇關(guān)于解決Druid動(dòng)態(tài)數(shù)據(jù)源配置重復(fù)刷錯(cuò)誤日志的問題的文章就介紹到這了,更多相關(guān)Druid動(dòng)態(tài)數(shù)據(jù)源配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 通過springboot+mybatis+druid配置動(dòng)態(tài)數(shù)據(jù)源
- springboot 動(dòng)態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方法(Mybatis+Druid)
- SpringBoot整合Druid數(shù)據(jù)源過程詳解
- Spring Boot+Mybatis+Druid+PageHelper實(shí)現(xiàn)多數(shù)據(jù)源并分頁的方法
- SpringBoot使用Druid數(shù)據(jù)源的配置方法
- 詳解Spring Boot整合Mybatis實(shí)現(xiàn) Druid多數(shù)據(jù)源配置
相關(guān)文章
Spring Security 實(shí)現(xiàn)用戶名密碼登錄流程源碼詳解
在服務(wù)端的安全管理使用了Spring Security,用戶登錄成功之后,Spring Security幫你把用戶信息保存在Session里,但是具體保存在哪里,要是不深究你可能就不知道,今天小編就帶大家具體了解一下Spring Security實(shí)現(xiàn)用戶名密碼登錄的流程2021-11-11
Java讀取resources目錄下文件路徑的九種代碼示例教程
在Java開發(fā)中經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑,這篇文章主要給大家介紹了關(guān)于Java讀取resources目錄下文件路徑的九種代碼示例教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
Java多線程環(huán)境下SimpleDateFormat類安全轉(zhuǎn)換
這篇文章主要介紹了Java多線程環(huán)境下SimpleDateFormat類安全轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
使用javax.sound實(shí)現(xiàn)簡單音頻播放
這篇文章主要為大家詳細(xì)介紹了使用javax.sound實(shí)現(xiàn)簡單音頻播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Java之Spring簡單的讀取和存儲(chǔ)對(duì)象
這篇文章主要介紹了Spring的讀取和存儲(chǔ)對(duì)象,獲取 bean 對(duì)象也叫做對(duì)象裝配,是把對(duì)象取出來放到某個(gè)類中,有時(shí)候也叫對(duì)象注?,想進(jìn)一步了解的同學(xué)可以參考本文2023-04-04

