我们在这里有一个基于servlet的应用程序,我们遇到了问题。这里发生了什么:在oracle超时之后(比如我们下班后回家并尝试在第二天登录应用程序),我们会遇到很多错误和异常,例如:连接已关闭,已结束语句等。
模拟此错误的一种方法是以管理员身份访问oracle会话,并在使用过程中终止会话。这样做会发生同样的问题。
我们做的是,我们有一个名为system-proj的主项目,它是所有其他模块(由maven设置)的先决条件,我们部署 all {{1} tomcat中的文件。
重启tomcat解决了这个问题。很简单。
我的问题是,是否有任何方式重新建立此连接而不重新启动 Tomcat ?或者,如果需要重新启动Tomcat(或自动重新加载单个.war
),有没有办法做到这一点?
我无法看到我错在哪里。
答案 0 :(得分:1)
根据您的描述,我认为您正在使用数据库池。连接池是预先创建的一组数据库连接,将被使用,并重新用于提供多个请求。在空闲时,数据库连接在数据库服务器上超时,并且无效,因此在长时间不活动后会出现错误。重新启动Tomcat时,您将在连接池中重新创建新连接,从而解决问题。
如果您正在使用数据库池,那么您可以使用随机查询对数据库执行ping操作(例如,如果在x分钟内未使用连接,则在Oracle上从“选项卡”中选择计数(*))。 x应小于数据库的空闲连接超时时间。
另一个更简单的解决方案是打开数据库连接,执行数据库操作,然后关闭数据库连接,而不是使用数据库池。由于连接是按需创建的,因此没有超时问题。虽然这是一个简单的解决方案,但这可能不是一个可行的解决方案,因为获得新连接会产生一些开销。