【问题标题】:Tomcat Connection Pool under WEB-INF/context.xml or TOMCAT_HOME/conf/server.xml?WEB-INF/context.xml 或 TOMCAT_HOME/conf/server.xml 下的Tomcat 连接池?
【发布时间】:2014-07-08 08:21:47
【问题描述】:

这是我第一次尝试在tomcat(版本8)中设置连接池,我有点困惑。看来我有 2 个选项可供使用,1)我可以添加类似的内容:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <!-- Specify a JDBC datasource for oracle -->
    <Resource name="jdbc/testdb" 
              auth="Container"
              type="javax.sql.DataSource" 
              username="DB_USERNAME" 
              password="DB_PASSWORD"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@xxx:1525:dbname"
              maxActive="10" 
              maxIdle="4" />
</Context>

在我的项目 WEB-INF 文件夹中名为“context.xml”的文件中。 ,2)我可以添加如下内容:

<Context path="/dbcp" docBase="dbcp" debug="5"
reloadable="true" crossContext="true">

<Resource name="jdbc/TestDB" auth="Container"
   type="javax.sql.DataSource" removeAbandoned="true"
   removeAbandonedTimeout="30" maxActive="100"
   maxIdle="30" maxWait="10000" username="kunal"
   password="java_facier"
   driverClassName="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost/dbcptest"/>

</Context>

在 TOMCAT_HOME/conf/sever.xml 中,然后添加:

<resource-ref>
    <description> DB Connection Pooling</description>
    <res-ref-name> jdbc/TestDB</res-ref-name>
    <res-type> javax.sql.DataSource</res-type>
    <res-auth> Container</res-auth>
</resource-ref>

到我项目中的 WEB-INF/web.xml 文件...

如果我在这两种情况下都是正确的,那么使用哪一种更好?另外我应该把我的数据库供应商 jdbc-driver 放在哪里?

【问题讨论】:

  • 如果只有一个 Web 应用程序会使用,那么我看不出你为什么要将它放在 server.xml 中。你越少搞这个越好。
  • 感谢@ScaryWombat,这确实有道理。那么我应该把我的数据库供应商的 JDBC 驱动程序放在哪里呢?如果我使用 maven,我可以在我的 pom.xml 中指定它?
  • 我个人当然会使用 maven 去 WEB-INF/lib。

标签: java sql eclipse tomcat connection-pooling


【解决方案1】:

将 JDBC 库放到 $tomcat/lib 文件夹中,这样 webapp 重新加载就不会触及它。我发现这是最好的通用规则,甚至官方 Apache Tomcat documentation 指示 $CATALINA_HOME/lib 文件夹,所以请遵循他们的智慧。

$tomcat/webapps/mywebapp/META-INF/context.xml
这为您提供了一个应用程序级别的池。您有两个或多个 webapps 连接到同一个数据库,每个都有自己的池。这意味着他们遵守自己的私人最大限制和此类仪表。分发和安装 mywebapp.war 文件很容易,这是一个独立的应用程序。

$tomcat/conf/server.xml
这提供了一个全局池,其中两个或多个 Web 应用程序共享相同的最大限制和此类计量器。如果您必须控制打开到 db 引擎的连接总数,那么您应该在此处放置 jdbc 设置。 Tomcat 管理员必须在部署 web 应用之前设置此设置。

编辑:哦,我看到您已将 jdbc 设置放入 server.xml 文件中的 &lt;Context&gt; 元素中。好吧,在那种情况下,我认为它仍然是一个 webapp-private 池。如果您需要全局池,请将其添加到 xml 文件顶部的 &lt;GlobalNamingResources&gt; 元素中。

【讨论】:

  • 我对此并不虔诚,但我更喜欢 WEB-INF/lib,因为我经常忘记在 $tomcat/lib 中部署 jars,而且如果 diff webapps 使用 diff,有时还会遇到版本问题数据库版本
【解决方案2】:

这两种方法各有利弊:
1.应用级打包创建App本地连接池。
2.独立于Tomcat的设置
但, 发布时的应用程序需要特定于环境的版本。

同时,如果tomcat维护连接池,那么应用只依赖于“注册名”,单个包可以分发给所有环境。

总而言之,应用级打包以开发人员为中心,而 Tomcat 维护的连接池操作友好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多