这是我第一次尝试在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放在哪里?
答案 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维护的连接池操作友好。