有没有一种方法可以在运行时重新加载Tomcat的连接池?

bkh*_*jkt 5 tomcat connection-pooling java-ee bonecp

我的情况如下:

  • 我必须维护一个以Tomcat(6)作为Web服务器的服务器,上面有一堆Web应用程序。这些Web应用程序由其他人维护。我们的服务器已连接到另一个部门的数据库服务器,该服务器具有我们的Web应用程序需要显示的信息。如果没有适当的池化策略,我们的服务器很快就会陷入灾难。

  • 现在,我向所有人介绍了Pooling(我选择了BoneCP-0.7),我们将创建一个驻留在Tomcat全局JNDI Context上的单个池,并让每个人都从中获得连接。我想那应该可以解决问题。

我担心的是:如何完全控制此Pooling?我有一些要求:

  • 我想在运行时手动或以编程方式重新加载DataSource配置(将在需要时尝试连接到备份服务器)

  • 更改可以不时更改的连接数(最小,最大,空闲连接)

  • 保持Tomcat存活为佳

  • 我打算构建一个使用JMX来连接和检索信息的警报系统,并有一个按钮来重新加载Pool(我知道所有Pooling策略都具有某种恢复能力,但是其他DB服务器会定期崩溃,因此请手动重新启动连接是比较可取的)。

我想到了一些可能的解决方案:

  • 告诉Tomcat重新启动其全局JNDI上下文
  • 告诉Tomcat重新启动其DataSource对象
  • 告诉BoneCP重新启动其池,并在必要时重新创建连接
  • 重新启动Tomcat本身

我的问题是:

  1. 我可以安全地执行上述解决方案而不影响Tomcat(和其他Web应用程序)吗?
  2. 我是否应该这样做呢?(我想只是重新启动Tomcat)

Chr*_*ltz 2

(为什么有人选择 BoneCP?我听说过的每个涉及 BoneCP 的问题都通过发帖者切换到另一个 CP 来解决,一切正常。BoneCP 甚至还没有达到 v1.0。我想这是下一个大事件.只是还没到。)

Tomcat 支持 Apache commons-dbcp 和 Tomcat 自己的内置 tomcat-pool:只需按照 Tomcat 文档配置 JNDI 连接池即可。

不幸的是,Tomcat 目前不支持在运行时重新加载数据源。您可以通过 JMX 更改属性,但更改不会产生任何效果。您也可以关闭游泳池,但您最终会得到一个关闭的游泳池,这将毫无价值。

在Tomcat 的 bugzilla中记录增强功能可能是一件好事。