WEB-INF / context.xml下的Tomcat连接池还是TOMCAT_HOME / conf / server.xml?

时间:2014-07-08 08:21:48

标签: java sql eclipse tomcat connection-pooling

这是我第一次尝试在tomcat(版本8)中设置连接池,我有点困惑。看来我有两个选项可用,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”的文件中。 OR ,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放在哪里?

2 个答案:

答案 0 :(得分:7)

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

<强> $ Tomcat的/ web应用/ mywebapp / META-INF / context.xml中
这为您提供了一个应用程序级池。您有两个或更多连接到同一数据库的Web应用程序,每个都有自己的池。这意味着他们obye自己的私人最大限制和这样的米。分发和安装mywebapp.war文件很简单,这是一个独立的应用程序。

<强> $的Tomcat / CONF / server.xml中
这提供了一个全局池,其中两个或多个webapp共享相同的最大限制和这样的米。如果必须控制打开到db引擎的连接总数,那么应该放置jdbc设置。在部署Web应用程序之前,Tomcat管理员必须将此设置置于适当位置。

编辑:哦,我发现你已将jdbc设置放在server.xml文件的<Context>元素中。那么,在这种情况下,我认为它仍然是一个webapp私有池。如果需要全局池,则将其添加到xml文件顶部的<GlobalNamingResources>元素内。

答案 1 :(得分:1)

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

虽然,如果tomcat维护连接池,那么app只依赖于&#34;注册名称&#34;并且可以为所有环境分发单个包。

  

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