2016-06-28 89 views
0

我们有一个基于servlet的应用程序,我们遇到了问题。以下是发生了什么情况:在oracle超时之后(比如下班后回家并尝试在第二天登录应用程序),我们会收到很多错误和异常,如:连接关闭,关闭语句和其他。会话被终止后无法重新连接JDBC与Oracle

一种模拟此错误的方法是以管理员身份访问oracle会话并在使用过程中查杀会话。这样做会发生同样的问题。

我们做的是,我们有一个叫做系统凸出一个主要项目是先决条件的所有其它模块(Maven的设置),以及我们在Tomcat中部署所有.war文件。

问题通过重新启动tomcat来解决。就那么简单。

我的问题是,是否有重新建立这种连接没有重新启动Tomcat的任何方式?否则,如果重新启动Tomcat(或自动重新加载一个.war)是必要的,有没有办法做到这一点?

我看不出我在哪里错了。

回答

1

从你的描述我认为你正在使用数据库池。连接池是预先创建的一堆数据库连接,将被使用,并重新用于提供多个请求。在空闲时间内,数据库连接在数据库服务器上超时,并失效,因此长时间处于非活动状态后会出现错误。当您重新启动Tomcat时,您将在连接池中重新创建新连接,从而解决问题。

如果您使用的是数据库池,那么如果在x分钟内没有使用连接,则可以使用随机查询(例如 - 从Oracle的选项卡中选择count(*))来ping数据库。 x应该小于数据库的空闲连接超时时间。

另一个更简单的解决方案是打开数据库连接,执行数据库操作,然后关闭数据库连接,而不是使用数据库池。由于连接是按需创建的,因此您没有超时问题。虽然这是一个简单的解决方案,但这可能不是一个可行的解决方案,因为获取新连接会产生一些开销。

相关问题