數(shù)據(jù)庫連接超時java處理的兩種方式
數(shù)據(jù)庫連接超時java處理的方式
在測試一套數(shù)據(jù)庫是否能夠連接上的過程中,我們就會遇到這樣的一種情況,當(dāng)不能連接的時候會存在代碼運(yùn)行時間超級長的問題,這樣的話在頁面上會存在卡死的現(xiàn)象,為了解決這個問題
總結(jié)了下面兩種方式:
1.使用socket的方式設(shè)置連接超時(通用)
這個主要是通過使用socket.connect()方法建立連接,其連接主要需要用到ip和相關(guān)端口號(記得是int類型喲)
具體使用方法如下:
Socket socket = new Socket(); try { ? ?socket.connect(new InetSocketAddress(ip, portt), 3000); ? ?socket.setSoTimeout(3000); ? ?socket.getInputStream().read(); } catch (SocketTimeoutException e) { ? ?if (!socket.isClosed() && socket.isConnected()){ ? ??? ?System.out.println("讀取超時"); ? ?}else{ ? ??? ? System.out.println("連接超時"); ? ??? ? return null; ? ?} } catch (Exception e) { ? ?e.printStackTrace(); }
2.使用DriverManager.setLoginTimeout()方法來設(shè)置超時
這種情況下通常是通過DriverManager.getConnection()方式來建立連接的.
具體實(shí)現(xiàn)代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//操作數(shù)據(jù)庫第一步:找到驅(qū)動 DriverManager.setLoginTimeout(3)//表示3秒; Connection con = DriverManager.getConnection(url,user,passwd);//第二步:建立連接 ? ? ? ? Statement st = con.createStatement();//第三步:建立一個statement的對象
上面也順便把如何測試數(shù)據(jù)庫連接的方法也拋出來了。
java的遠(yuǎn)程數(shù)據(jù)庫連接,超時問題
最近開發(fā)短信發(fā)送模塊,一直困擾我的一個問題.就是定期獲得短信發(fā)送狀態(tài),看短信有沒有發(fā)出去,啟動一個線程,但是沒有過多久就死了,出現(xiàn)socke的write錯誤,通過future對超時控制也不行,過段時間久線程就死了,后來更改遠(yuǎn)程數(shù)據(jù)庫的設(shè)置。
port = 3369? socket = /tmp/mysql.sock? skip-locking? max_allowed_packet = 2M? sort_buffer_size = 512K? net_buffer_length = 8K? read_buffer_size = 256K? read_rnd_buffer_size = 512K? myisam_sort_buffer_size =16M? wait_timeout=1400? interactive_timeout=1400?
增加wait_timeout和interactive_timeout參數(shù),還是出現(xiàn)一樣的問題,時間過了一個月后,在一個偶然的機(jī)會是因為socket沒有設(shè)置超時造成的所以更改連接語句增加
jdbc:mysql://ip/true&characterEncoding=gbk&connectTimeout=120000&socketTimeout=120000
設(shè)置socket的超時為2分鐘,測試通過.運(yùn)行穩(wěn)定.
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
servlet實(shí)現(xiàn)文件下載的步驟及說明詳解
這篇文章主要為大家詳細(xì)介紹了servlet實(shí)現(xiàn)文件下載的步驟及說明,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09java聯(lián)系人管理系統(tǒng)簡單設(shè)計
這篇文章主要為大家詳細(xì)介紹了java聯(lián)系人管理系統(tǒng)簡單設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10Rabbitmq延遲隊列實(shí)現(xiàn)定時任務(wù)的方法
這篇文章主要介紹了Rabbitmq延遲隊列實(shí)現(xiàn)定時任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Spring數(shù)據(jù)庫連接池實(shí)現(xiàn)原理深入刨析
開發(fā)web項目,我們肯定會和數(shù)據(jù)庫打交道,因此就會涉及到數(shù)據(jù)庫鏈接的問題。在以前我們開發(fā)傳統(tǒng)的SSM結(jié)構(gòu)的項目時進(jìn)行數(shù)據(jù)庫鏈接都是通過JDBC進(jìn)行數(shù)據(jù)鏈接,我們每和數(shù)據(jù)庫打一次交道都需要先獲取一次鏈接,操作完后再關(guān)閉鏈接,這樣子效率很低,因此就出現(xiàn)了連接池2022-11-11springboot post接口接受json時,轉(zhuǎn)換為對象時,屬性都為null的解決
這篇文章主要介紹了springboot post接口接受json時,轉(zhuǎn)換為對象時,屬性都為null的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Spark學(xué)習(xí)筆記 (二)Spark2.3 HA集群的分布式安裝圖文詳解
這篇文章主要介紹了Spark2.3 HA集群的分布式安裝,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Spark2.3 HA集群分布式安裝具體下載、安裝、配置、啟動及執(zhí)行spark程序等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02