【问题标题】:Can't reconnect JDBC with Oracle after session gets killed会话被终止后无法将 JDBC 与 Oracle 重新连接
【发布时间】:2016-06-28 14:53:15
【问题描述】:

我们这里有一个基于 servlet 的应用程序,但我们遇到了问题。这是发生了什么:在 oracle 超时后(比如我们下班回家并尝试在第二天登录应用程序),我们得到很多错误和异常,例如:连接关闭、关闭语句等.

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

我们所做的是,我们有一个名为 system-proj 的主项目,它是所有其他模块(由 maven 设置)的先决条件,我们部署 all .war 文件在tomcat中。

问题通过重启tomcat得到解决。就这么简单。

我的问题是,有没有任何 方法可以在 不重新启动Tomcat 的情况下重新建立此连接?或者,如果需要重启Tomcat(或自动重新加载单个.war),有什么办法吗?

我看不出我哪里错了。

【问题讨论】:

    标签: java oracle session tomcat jdbc


    【解决方案1】:

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

    如果您使用的是数据库池,那么如果某个连接在 x 分钟内未使用,您可以使用随机查询(如 Oracle 上的“从选项卡中选择计数(*)”)来 ping 数据库。 x 应该小于你的数据库的空闲连接超时时间。

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

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多