在 tomcat 7.x 配置 Apache dbcp2 连接池
Configure Apache dbcp2 connection pool in tomcat 7.x
我正在开发使用 Tomcat 7.0.64 的遗留应用程序,我们希望将 apache dbcp2 连接池配置为 Tomcat 中的资源。
该应用程序运行 Spring 4.x 和 Hibernate 4.x。
阅读 Tomcat 文档后,当我尝试从 Spring 应用程序访问 dbcp2 连接池时,出现以下异常 -
javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
为什么在 server.xml
中添加的“factory”属性是 org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory
类型,但仍使用 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
。下面提到的是配置的详细信息-
在 server.xml
中添加了以下内容 -
<GlobalNamingResources>
<Resource name="jdbc/mytestDB"
auth="Container"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
type="javax.sql.DataSource"
username="test"
password="test"
driverClassName="oracle.jdbc.driver.OracleDriver"
description="test db"
url="jdbc:oracle:thin:@mytestDB:1521/mytestDB"
maxActive="15"
maxIdle="5"/>
</GlobalNamingResources>
在 web.xml 中添加了以下内容 -
<resource-ref>
<description>PVO Database</description>
<res-ref-name>jdbc/mytestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
添加了以下 Maven 依赖项 -
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>8.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.1</version>
</dependency>
在测试中 class 添加了以下 -
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = envContext.lookup("jdbc/mytestDB"); // This line gives the above mentioned error.
Connection connection = ds != null ? ds.getConnection() : null;
通过在要通过 JNDI 检索的 tomcat -configure
数据源中添加以下 JVM 属性 来解决问题 -
JAVA_OPTS="${JAVA_OPTS} -
Djavax.sql.DataSource.Factory="org.apache.commons.dbcp2.BasicDataSourceFactory"
但是我们决定升级 tomcat 版本。
我正在开发使用 Tomcat 7.0.64 的遗留应用程序,我们希望将 apache dbcp2 连接池配置为 Tomcat 中的资源。 该应用程序运行 Spring 4.x 和 Hibernate 4.x。 阅读 Tomcat 文档后,当我尝试从 Spring 应用程序访问 dbcp2 连接池时,出现以下异常 -
javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
为什么在 server.xml
中添加的“factory”属性是 org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory
类型,但仍使用 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
。下面提到的是配置的详细信息-
在 server.xml
中添加了以下内容 -
<GlobalNamingResources>
<Resource name="jdbc/mytestDB"
auth="Container"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
type="javax.sql.DataSource"
username="test"
password="test"
driverClassName="oracle.jdbc.driver.OracleDriver"
description="test db"
url="jdbc:oracle:thin:@mytestDB:1521/mytestDB"
maxActive="15"
maxIdle="5"/>
</GlobalNamingResources>
在 web.xml 中添加了以下内容 -
<resource-ref>
<description>PVO Database</description>
<res-ref-name>jdbc/mytestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
添加了以下 Maven 依赖项 -
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>8.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.1</version>
</dependency>
在测试中 class 添加了以下 -
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = envContext.lookup("jdbc/mytestDB"); // This line gives the above mentioned error.
Connection connection = ds != null ? ds.getConnection() : null;
通过在要通过 JNDI 检索的 tomcat -configure
数据源中添加以下 JVM 属性 来解决问题 -
JAVA_OPTS="${JAVA_OPTS} -
Djavax.sql.DataSource.Factory="org.apache.commons.dbcp2.BasicDataSourceFactory"
但是我们决定升级 tomcat 版本。