解决JDBC 连接 SQL Azure 超时问题

原创 2012年04月01日 15:48:01

最近在做一个Azure云项目,前台是Java代码,Java代码里使用JDBC驱动访问SQL Azure。

用了JDBC 连接串后,发现2分钟左右连接就超时timeout,原来在SQL Server上是能正常工作的。

jdbc:sqlserver://XXXX.database.windows.net:1433;database=miap;user=username@XXXX;password=myPassword;encrypt=true;hostNameInCertificate=*.database.windows.net

理论上SQL Azure会在30分钟后把idle connection自动踢掉,如下面文档所记载:

http://msdn.microsoft.com/en-us/library/windowsazure/ee336245.aspx

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连接还需要一些额外设置,如下面的论坛网址中所描述:

http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/69f2de2f-389b-4c4e-9497-471b8094b029/

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.

针对这个问题的解决方案在这里http://msdn.microsoft.com/en-us/library/hh290696(v=SQL.110).aspx


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

通过Java访问国内Azure服务

随着Azure服务在国内的开展,不少Java用户也开始在国内Azure部署应用。不过,目前有一个问题,是关于证书。国内Azure服务HTTPS端点的证书,是由CNNIC颁发的,而CNNIC作为一个根证...
  • ShaunFang
  • ShaunFang
  • 2013年12月13日 20:48
  • 2765

PL/SQL可以连oracle,但是jdbc连不上

首先强烈鄙视一下客户,不让我连数据库,因为安全方面,我忍了;让我通过远程桌面在一个window2003上部署开发环境编程,虽然很卡,卡出屎,我也忍了;关键是程序连不上数据库,找他们,他们也不管,数据库...
  • King_818
  • King_818
  • 2016年11月04日 14:25
  • 7508

Oralce 远程JDBC无法连接,自带Sql plus 可以正常访问,sql developer无法连接

出现的问题: Oracle 11g 数据库突然无法访问
  • JimBo3693
  • JimBo3693
  • 2014年06月19日 15:54
  • 1273

JAVA之JDBC的相关问题(无法与SQLServer连接的解决)

昨天看到了JDBC的那一章,要用到数据库,就百度了SQL下载安装了,安装完之后,才知道还要下载驱动,于是百度又下了mysql....jar的包,又搜索如何加入到项目中, 一切完成之后就开始加载去驱...
  • xinwen1995
  • xinwen1995
  • 2016年07月29日 10:13
  • 1368

Microsoft JDBC Driver 3.0 for SQL Server and SQL Azure

  • 2011年06月28日 16:32
  • 3.61MB
  • 下载

JDBC连接SQL Server 2008问题

  • 2012年10月31日 10:54
  • 251KB
  • 下载

Java与SQL Server 2005(2000)数据库连接问题 (jdbc驱动)

  • 2011年03月13日 12:58
  • 35KB
  • 下载

解决在Azure 部署SharePoint2013 数据服务器拒绝连接和域连接出现的问题

解决在Azure 部署SharePoint2013 数据服务器和域连接出现的问题 问题描述:在Azure上部署了两个服务器,使用的是一个DNS一个网段,由于使用频繁,欠费停机了。 到月自动续费后,打...
  • jason_dct
  • jason_dct
  • 2016年01月09日 21:15
  • 1294

JDBC连接SQL Server的诸多问题

SQL Server连接中问题还真多。不进行设置还真连接不上,这里小记一下!(部分资料来源于互联网) JDBC连接例子下载:http://download.csdn.net/detail/xn454...
  • xn4545945
  • xn4545945
  • 2012年12月01日 14:57
  • 1255

windows7中SQL Server 2005 JDBC的连接若干问题

一、Window7中SQL Server Management Studio windows集成不能登陆;首先我们应该在SQL Server Management Studio 上右击选择“以管理员身...
  • QueenJade
  • QueenJade
  • 2011年02月20日 20:26
  • 1520
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决JDBC 连接 SQL Azure 超时问题
举报原因:
原因补充:

(最多只允许输入30个字)