我在glassfish 4.0.1上部署了一个j2ee Web应用程序,我希望将其用于Windows Azure数据库。
该应用程序使用JPA和eclipseLink。
如果我从glassfish接口ping它,它可以工作,所以我提供的属性都可以。
如果应用程序在服务器启动后立即使用数据库,一切顺利(它可以检索/存储数据)
当应用程序在空闲一段时间后尝试使用数据库时,我得到一个异常,说连接已关闭。
如果我刷新连接(来自glassfish管理员),它会再次开始工作,直到它闲置一段时间。
基本上,只要它执行数据库操作一切正常,但如果暂时没有数据库操作,下一个db操作将导致异常。
我找到了解决方案,但我很难实现它。有人可以帮帮我吗?
以下是解决方案的链接 http://www.robblackwell.org.uk/2010/12/02/java-jdbc-to-sqlazure-connection-drop-workaround.html
或在这里 https://msdn.microsoft.com/en-us/library/hh290696(v=sql.110).aspx
答案 0 :(得分:0)
根据我的经验,解决此问题的另一种方法是,您可以在Java Web应用程序上使用Java Schedule框架“Cron4j”或“Quartz”创建crontab侦听器。 crontab侦听器发送一个简单的查询(如“从t_XXX限制1中选择id”),间隔小于一分钟,以保持数据库连接处于活动状态。
按“Windows + R”并运行“regedit”。检查注册表项“KeepAliveTime”,“KeepAliveInterval”和“TcpMaxDataRetransmission”是否存在于注册表树路径“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters”中。
如果路径中不存在,则需要以管理员身份打开cmd窗口,并将以下commonds复制到cmd窗口以运行它们。
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10
然后,您可以在注册表中找到它们并测试问题。
最诚挚的问候。