溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫(kù)連接超時(shí)java處理的方式有哪些

發(fā)布時(shí)間:2023-05-06 10:48:58 來源:億速云 閱讀:109 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“數(shù)據(jù)庫(kù)連接超時(shí)java處理的方式有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“數(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í)造成的所以更改連接語(yǔ)句增加

    jdbc:mysql://ip/true&characterEncoding=gbk&connectTimeout=120000&socketTimeout=120000

    設(shè)置socket的超時(shí)為2分鐘,測(cè)試通過.運(yùn)行穩(wěn)定.

    感謝各位的閱讀,以上就是“數(shù)據(jù)庫(kù)連接超時(shí)java處理的方式有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)數(shù)據(jù)庫(kù)連接超時(shí)java處理的方式有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI