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