1. 程式人生 > >解決JDBC 連線 SQL Azure 超時問題

解決JDBC 連線 SQL Azure 超時問題

最近在做一個Azure雲專案,前臺是Java程式碼,Java程式碼裡使用JDBC驅動訪問SQL Azure。

用了JDBC 連線串後,發現2分鐘左右連線就超時timeout,原來在SQL Server上是能正常工作的。

jdbc:sqlserver://XXXX.database.windows.net:1433;database=miap;[email protected];password=myPassword;encrypt=true;hostNameInCertificate=*.database.windows.net

理論上SQL Azure會在30分鐘後把idle connection

自動踢掉,如下面文件所記載:

Maximumallowable durations are subject to change depending on the resource usage.A logged-in session that hasbeen idle for 30 minutes will be terminated automatically. We stronglyrecommend that you use the connection pooling and always close the connectionwhen you are finished using it so that the unused connection will be returnedto the pool.

目前ado.net 連線是符合上述文件的。但是,JDBC連線還需要一些額外設定,如下面的論壇網址中所描述:

I rewrote the Java program in C Sharp, and predictably that worksfine and DOES NOT exhibit the connection drop problems.

I used Wireshark to compare the Java and .NET implementations at theTCP level and the problem becomes clear:

TCP Keep-Alivemessages are sent to SQL Azure every 30 seconds from the .NET code, but thereare no such messages from JDBC, hence the JDBC connection times out at betweenabout 61 to 63 seconds.

Registry Setting

Recommended Value

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime

30000

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveInterval

1000

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpMaxDataRetransmission

10

You must then restart the computer for the registry settings to take effect.

To accomplish this when running in Windows Azure create a startup task to add the registry keys. For example, add the following Startup task to the service definition file:

<Startup>
    <Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple">
    </Task>
</Startup>

Then add a AddKeepAlive.cmd file to your project. Set the "Copy to Output Directory" setting to Copy always. The following is a sample AddKeepAlive.cmd file:

if exist keepalive.txt goto done
time /t > keepalive.txt
REM Workaround for JDBC keep alive on SQL Azure
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 >> keepalive.txt
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 >> keepalive.txt
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10 >> keepalive.txt
shutdown /r /t 1
:done

相關推薦

解決JDBC 連線 SQL Azure 超時問題

最近在做一個Azure雲專案,前臺是Java程式碼,Java程式碼裡使用JDBC驅動訪問SQL Azure。 用了JDBC 連線串後,發現2分鐘左右連線就超時timeout,原來在SQL Server上是能正常工作的。 jdbc:sqlserver://XXXX.datab

Vert.x(五): Vert.x-通過非同步的方式使用JDBC連線SQL

歡迎關注http://quanke.name/ 交流群:231419585 轉載請註明出處,謝謝 在這篇文章中,我們將會看到怎樣在vert.x應用中使用HSQL,當然也可以使用任意JDBC,以及使用vertx-jdbc-

JSP 使用JDBC連線 SQL Server資料庫

使用jdbc連線資料庫首先需下載sqljdbc4.jar (點此下載) 下載後放入工程WEB-INF/lib目錄下並新增進工程庫: 對jar檔案右鍵選擇: 或者如下操作 1. 2. 3. jsp連線程式碼: /**注意加try

JDBC連線SQL Server

定義資料庫連線url,資料庫使用者名稱username,資料庫密碼passwordprivate static String url = "jdbc:sqlserver://localhost:1433;DatabaseName=emp";private static Str

關於JAVA9通過JDBC連線 sql server 資料庫的問題

在學習到SQL語句的嵌入式式程式設計時,我興致勃勃地開始嘗試受用jdbc嘗試一下!!! 但是,讓讓我悲痛欲絕的一天也就開始了!!! 首先,先來簡單的過一遍jdbc連線sql server 資料庫的過程: 載入驅動程式:Class.forName("com

c#連線sql資料庫超時問題

最近用c#寫了個視窗程式,其中需要連線sql資料庫,新增app.config配置檔案,內容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration>   <connectionStri

JDBC連線sql server資料庫的詳細步驟和程式碼

JDBC連線sql server資料庫的步驟如下: 1、載入JDBC驅動程式:         在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器),         這通

如何在Eclipse中用JDBC連線Sql Server 2005,曾經讓我如此的蛋疼(下篇)

接上篇,咱們接著續。咱們現在不用上篇中的那個新建的Test了,看了你就明白為什麼不用那個了,因為我要進行對比。 開啟Eclipse     a.左上角file->new-> java -> java project,起名為Test       b.選擇ecl

Ubuntu系統下JDBC連線SQL server2017

(一)在Ubuntu上安裝JDBC驅動 下載之後,我們會看到這樣的一個壓縮檔案: (2)開啟命令列,按“Ctrl+Alt+T”撥出終端,敲入解壓命令,找到我們下載檔案的位置 /home/hadoop/下載,將我們的.tar.gz檔案進行解壓, 命令:sudo tar

JDBC連線SQL Server2017資料庫

選擇你正在使用的協議,要是不知道是哪個的話就都改了吧(就是這麼暴力/笑哭)  狀態都改成啟用 如上圖然後單擊 TCP/IP 右鍵屬性 IP地址 將IP1 後面改成 127.0.0.1 把所有的已啟用都改成是接著,拖動下拉條到最下方,將IPAll中的【TCP埠】設成【1433】,其餘不變。如下圖確定,重新啟動計

java採用jdbc連線SQL資料庫例項

<p>import java.sql.*; </p><p>public class test {    public static void main(String[] args) {  String JDriver="com.micros

thinkphp5 連線Sql Service出現could not find driver的解決辦法

今天頭疼弄這個,一直百度谷歌的查,最後功夫不負有心人啊,找到了方法,自己記錄一下,以免以後再出現 因為我用的是php5.5以上版本,但php內建已經不支援了mssql,下載微軟的擴充套件還是沒有用,只能找啊找啊,終於找到可以用的版本了,具體的配置方法也給大家說一下。 首先說一下thin

IDEA , 用JDBC驅動連線SQL Server伺服器異常詳解

本文適用於IDEA,sqlserver伺服器的使用者。 今天研究JDBC連線伺服器,一直琢磨了一晚上,才解決這個問題。 這類問題網上也有很多類似的部落格,但是不一定有用(本人親測),畢竟程式版本不同可能適用性就不同。 剛開始每次執行程式碼都是這樣的問題: 這是在資料庫連線成

解決ssh連線超時時間(ssh timeout)的設定方法

  本文介紹下,linux中ssh連線超時時間的設定方法,以避免總是被強行退出。有需要的朋友,參考下吧。有關修改ssh連線超時時間的方法,網上介紹的很多了。比如下面這個:可以減少ssh連線超時等待的時間:方法:ssh -o ConnectTimeout=3 192.168

jdbc連線mysql時報時區設定錯誤解決方法

參考https://blog.csdn.net/zqb765720343/article/details/80076020,感謝分享。 jdbc連線mysql時報時區設定錯誤,提示相差8小時。 1、在mysql命令列模式下修改時區,經過嘗試發現,這種方法重啟mysql後就失效了,不是永久的。

MySQL8.0的jdbc連線異常解決,連不上解決辦法

1.首先,安裝MySQL的時候選擇下面那種加密方式,否則第三方軟體不能連線資料庫,比如navicat連線不上。 2.以下兩種方式可以獲得Connection物件,一種是通過Driver物件的connect方法,一種是DriverManager的方法,建議使用後者。 3.在這裡注意以下,註冊驅

Java連線SQL資料庫時碰到com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有語法錯誤。

在寫一個小東西的時候遇到了這個問題,不知道怎麼解決。 希望大神們能幫忙解決下。 com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有語法錯誤。     at com.microsoft.sqlserv

解決ssh連線伺服器超時自動斷開的問題

通常新伺服器,通過ssh連線到伺服器之後,一段時間不操作,便會斷開連結,那麼該如何避免呢,下面我們通過對伺服器的ssh進行下設定,便能夠解決這個問題 登陸伺服器,到ssh目錄 命令:cd /etc/ssh 備份配置項(養成備份的好習慣) 命令:cp

JDBC連線SQLsever2008出現錯誤,求解決

資料庫驅動成功 com.microsoft.sqlserver.jdbc.SQLServerException: 使用者 ‘ss’ 登入失敗。 ClientConnectionId:c4cc688f-67bb-444f-af4a-63c6785898d9 資料庫連線錯誤 at com.microsoft.sq

解決c3p0連線資料庫超時問題

問題:c3p0連線資料庫超時 在用c3p0連線mysql資料庫時,時間長了會自動斷開,那是因為mysql伺服器預設的“wait_timeout”是8小時【也就是預設的值預設是28800秒】,也就是說一個connection空閒超過8個小時,Mysql將自動斷開該