访问项目 alread closed的解决办法

问题描述:
正常登录系统,不操作,过20分钟后,超时登录浏览器卡死问题(这时用别的浏览器打开时能正常登录)

环境:tomcat与数据库服务器不在同一个网段。

分析
出错的原因是,获取数据库连接时超时,默认需要等20分钟后才返回数据数据库连接超时错误,导致这个期间浏览器卡死。

解决方案
方案一:修改tomcat中数据库的连接参数
原因:
在长时间没有访问tomcat后,数据库连接已经失效,连接池因为没有检测,所以认为连接有效,导致连接出错。避免这种错误的方法是设置连接有效查询sql语句。设置后,连接池会使用该sql语句测试连接是否有效,如果无效,会重新建立连接。

解决方案:

设置方法为:在%JUSTEP_HOME%\apache-tomcat\conf\context.xml中的节点中增加属性validationQuery
mysql数据库:

<Resource name="jdbc/cloud" type="javax.sql.DataSource" maxActive="100" maxIdle="30" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/cloud" username="root" password="x5" validationQuery="select 1"/>

 

SQLServer数据库:
在server.xml中的节点中增加属性validationQuery=”select sysdate from dual;”。例如:

<Resource name="system" auth="Container" type="javax.sql.DataSource" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://127.0.0.1:1433/x5_1900" username="sa" password="sa" maxActive="10" maxIdle="5" validationQuery="select sysdate from dual;"/>

 

oralce示例

<Resource name="reg" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="xxxx" username="xx" password="xx" maxActive="10" maxIdle="5" validationQuery="select 1 from dual"/>

其中:
如果jdbc的版本<10.1.0.5时, 使用oracle.net.READ_TIMEOUT=5000;
如果jdbc的版本>=10.1.0.5时,使用oracle.jdbc.ReadTimeout=5000;
其中的5000单位是秒,可以结合自己的实际需求调整大小。

方案二:调整网络
使得tomcat与数据库服务器在同一个网段内。
ps:本文章节选自Wex5论坛

posted @ 2018-02-05 20:55  杜小二  阅读(369)  评论(0编辑  收藏  举报