解決Druid動態(tài)數(shù)據(jù)源配置重復刷錯誤日志的問題
Druid動態(tài)數(shù)據(jù)源配置 主要是繼承AbstractRoutingDataSource再通過AOP來實現(xiàn)動態(tài)數(shù)據(jù)源切換.
下面給大家介紹Druid動態(tài)配置數(shù)據(jù)源重復刷錯誤日志問題,具體內(nèi)容如下所示:
問題描述
功能需求:
使用druid數(shù)據(jù)庫連接池實現(xiàn) 動態(tài)的配置數(shù)據(jù)源功能:IP、端口、用戶名、密碼都是用戶頁面手動輸入,可以測試連接,保存數(shù)據(jù)源。
問題說明:
既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯誤,連接失敗等情況。
預期情況:用戶輸入的配置錯誤,測試連接時,會返回連接失敗的信息。
實際情況:數(shù)據(jù)源測試連接,連接失敗后:
后臺一直打印錯誤信息,一直自動重連
方法被阻塞無返回信息,導致前端頁面一直處于等待狀態(tài)
【錯誤信息】:
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 | 連接出錯后再嘗試連接次數(shù) |
breakAfterAcquireFailure | 數(shù)據(jù)庫服務宕機自動重連機制 |
maxWait | 超時等待時間 |
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");//如果失敗,當前的請求可以返回 DruidDataSource druidDataSource = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties); druidDataSource.setConnectionErrorRetryAttempts(0);// 失敗后重連的次數(shù) druidDataSource.setBreakAfterAcquireFailure(true);//請求失敗之后中斷 DataSource ds = druidDataSource;//如果有需要使用javax.sql.DataSource的話 } catch (Exception e) { e.printStackTrace(); } }
踩坑總結
不要在properties中配置connectionErrorRetryAttempts和breakAfterAcquireFailure,沒有效果
連接失敗的具體錯誤信息,catch不到,源碼中已經(jīng)catch了異常信息,做了相關處理
到此這篇關于解決Druid動態(tài)數(shù)據(jù)源配置重復刷錯誤日志的問題的文章就介紹到這了,更多相關Druid動態(tài)數(shù)據(jù)源配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Hadoop使用hdfs指令查看hdfs目錄的根目錄顯示被拒的原因及解決方案
這篇文章主要介紹了Hadoop使用hdfs指令查看hdfs目錄的根目錄顯示被拒的原因及解決方案,分布式部署hadoop,服務機只有namenode節(jié)點,主機包含其他所有節(jié)點,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-10-10MybatisPlus,無XML分分鐘實現(xiàn)CRUD操作
這篇文章主要介紹了MybatisPlus,無XML分分鐘實現(xiàn)CRUD操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08如何通過RabbitMq實現(xiàn)動態(tài)定時任務詳解
工作中經(jīng)常會有定時任務的需求,常見的做法可以使用Timer、Quartz、Hangfire等組件,這次想嘗試下新的思路,使用RabbitMQ死信隊列的機制來實現(xiàn)定時任務,下面這篇文章主要給大家介紹了關于如何通過RabbitMq實現(xiàn)動態(tài)定時任務的相關資料,需要的朋友可以參考下2022-01-01Java如何基于command調(diào)用openssl生成私鑰證書
這篇文章主要介紹了Java如何基于command調(diào)用openssl生成私鑰證書,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08