Azure: Java 连接SQL Azure数据库及Connection timeout问题解决方法
SQL Azure是Azure提供的关系数据库服务,它天生支持高可用性,扩展性。使用SQL Azure,开发人员不需要自己安装,升级,维护服务器,只需要简单的在Azure portal上创建一个SQL Azure服务器实例即可。SQL Azure是基于SQL Server的,其实,它就是SQL Server的一个受限制版本。SQL Azure支持几乎我们会用到的所有SQL Server的数据类型,支持T-SQL。关于SQL Azure的限制可以参考http://msdn.microsoft.com/en-us/library/ff394115.aspx。 更多资料可以参考http://stackoverflow.com/questions/3235164/what-is-the-difference-between-sql-azure-and-sql-server-2008。
一,Web版和Business版
在Azure portal,我们先创建一个SQL Azure的服务器。之后在服务器上,我们就可以创建SQL Azure的数据库。SQL Azure数据库分为两个版本:Web版和Business版。目前为止,这两个版本只是微软提出的概念,可能将来Business版本会有比Web版更多的功能,但是现在来说,除了数据库的最大容量,这两个版本并没有任何区别。Web版最大只支持5G,而Business版可以支持150G。选择Web版或者Business版后,可以选择数据库的最大容量,根据自己的需求选择一个即可。事实上,不管你选择什么版本,什么容量,这些都是可以改变的,在运行过程中,通过SQL语句即可更改:
dataSource.pooled=truedataSource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverdataSource.username=username@servernamedataSource.password=userpassworddataSource.dbCreate=updatedataSource.url=jdbc:sqlserver://servername.database.windows.net:1433;database=databasename;ordataSource.url=jdbc:sqlserver://servername.database.windows.net:1433;database=databasename;encrypt=true;hostNameInCertificate=data.ch1-1.database.windows.net;注:用户名要带上SQL Azure服务器的名字,用户名和密码单独配置后,就不需要在URL里再配置了。 数据库连接的URL要带上数据库的名字。例子中的URL第一个是普通连接,第二个是SSL加密的连接,hostNameInCertificate会因为SQL Azure服务器处在的位置不同而不同,如果填错了,会出excpetion,其中会带有正确的URL,填回来即可。
如果要自己创建连接当然也是可以的:
注册表建
推荐值
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
实现的时候,在Role的definition文件里加上一个启动的task:
if exist C:\keepalive.txt goto donetime /t > C:\keepalive.txtREM Workaround for JDBC keep alive on SQL AzureREG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 >> C:\keepalive.txtREG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 >> C:\keepalive.txtREG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10 >> C:\keepalive.txtshutdown /r /t 1:done
每个instance在第一次运行的时候,会重启一次系统,所以第一次初始化可能会比较慢。 更多请参考:http://msdn.microsoft.com/en-us/library/hh290696%28v=SQL.110%29.aspx关键字:SQL Azure, Java, Grails, 连接中断