6

我的情况如下:

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

  • 现在我向大家介绍了 Pooling(我选择了 BoneCP - 0.7),我们将创建一个单一的池,它保留在 Tomcat 的全局 JNDI 上下文中,并让每个人都能从中获得连接。这应该可以解决问题,我猜。

我担心的是:我怎样才能完全控制这个 Pooling ?我有一些要求:

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

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

  • 最好让Tomcat保持活力

  • 我打算建立一个使用 JMX 连接和检索信息的警报系统,并有一个重新加载池的按钮(我知道所有的池策略都有某种恢复,但是另一个数据库服务器会定期崩溃,所以手动重新启动连接有点可取)。

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

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

我的问题是:

  1. 我可以在不影响 Tomcat(和其他 webapps)的情况下安全地执行上述解决方案吗?
  2. 我应该费心这样做吗?(我猜只是重新启动Tomcat)
4

1 回答 1

2

(为什么有人选择 BoneCP?我听说过的每个问题都涉及到 BoneCP . 只是还没到。)

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

不幸的是,Tomcat 目前不支持在运行时重新加载数据源。您可以通过 JMX 更改属性,但更改无效。您也可以关闭游泳池,但您最终会得到一个封闭的游泳池,然后一文不值。

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

于 2012-12-27T23:08:30.467 回答