數(shù)據(jù)庫連接超時(shí)java處理的兩種方式
數(shù)據(jù)庫連接超時(shí)java處理的方式
在測試一套數(shù)據(jù)庫是否能夠連接上的過程中,我們就會遇到這樣的一種情況,當(dāng)不能連接的時(shí)候會存在代碼運(yùn)行時(shí)間超級長的問題,這樣的話在頁面上會存在卡死的現(xiàn)象,為了解決這個(gè)問題
總結(jié)了下面兩種方式:
1.使用socket的方式設(shè)置連接超時(shí)(通用)
這個(gè)主要是通過使用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("讀取超時(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ù)庫第一步:找到驅(qū)動
DriverManager.setLoginTimeout(3)//表示3秒;
Connection con = DriverManager.getConnection(url,user,passwd);//第二步:建立連接 ? ? ? ?
Statement st = con.createStatement();//第三步:建立一個(gè)statement的對象上面也順便把如何測試數(shù)據(jù)庫連接的方法也拋出來了。
java的遠(yuǎn)程數(shù)據(jù)庫連接,超時(shí)問題
最近開發(fā)短信發(fā)送模塊,一直困擾我的一個(gè)問題.就是定期獲得短信發(fā)送狀態(tài),看短信有沒有發(fā)出去,啟動一個(gè)線程,但是沒有過多久就死了,出現(xiàn)socke的write錯誤,通過future對超時(shí)控制也不行,過段時(shí)間久線程就死了,后來更改遠(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)一樣的問題,時(shí)間過了一個(gè)月后,在一個(gè)偶然的機(jī)會是因?yàn)閟ocket沒有設(shè)置超時(shí)造成的所以更改連接語句增加
jdbc:mysql://ip/true&characterEncoding=gbk&connectTimeout=120000&socketTimeout=120000
設(shè)置socket的超時(shí)為2分鐘,測試通過.運(yùn)行穩(wěn)定.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文詳解前端和后端的數(shù)據(jù)是如何連接的(基于Spring?Boot、Django或Node.js)
這篇文章主要介紹了前端和后端的數(shù)據(jù)是如何連接的相關(guān)資料,文中通過示例介紹的非常詳細(xì),舉例講解的是基于Spring?Boot、Django或Node.js,需要的朋友可以參考下2025-01-01
SpringBoot下使用自定義監(jiān)聽事件的流程分析
事件機(jī)制是Spring的一個(gè)功能,目前我們使用了SpringBoot框架,所以記錄下事件機(jī)制在SpringBoot框架下的使用,同時(shí)實(shí)現(xiàn)異步處理,這篇文章主要介紹了SpringBoot下使用自定義監(jiān)聽事件,需要的朋友可以參考下2023-08-08
Eclipse?IDE中如何設(shè)置JVM啟動參數(shù)
這篇文章主要介紹了Eclipse?IDE中如何設(shè)置JVM啟動參數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
java導(dǎo)出csv方法實(shí)現(xiàn)講解
這篇文章主要介紹了java導(dǎo)出csv的方法,客戶要求在項(xiàng)目中有導(dǎo)出CSV文件的功能,并且給出了如何在不知道如何在不知道對象類型(沒有應(yīng)用泛型)的List中如何得到對象的屬性值,下面就詳細(xì)說下這個(gè)功能是如何實(shí)現(xiàn)的2013-12-12
idea右鍵沒有java class選項(xiàng)問題解決方案
這篇文章主要介紹了idea右鍵沒有java class選項(xiàng)問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

