在tomcat 7.x中配置Apache dbcp2连接池



我正在开发一个使用Tomcat 7.0.64的遗留应用程序,我们希望将apache dbcp2连接池配置为Tomcat中的资源。该应用程序运行Spring4.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]

为什么CCD_ 1被使用;工厂;在CCD_ 2中添加的属性的类型为CCD_。以下是配置的详细信息-

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>

在测试类中添加了以下内容-

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;

通过在tomcat-configure数据源中添加以下JVM属性以通过JNDI-检索来修复此问题

JAVA_OPTS="{JAVA_OPTS}-

Djavax.sql.DataSource.Factory="org.apache.commons.dbcp2.BasicDataSourceFactory">

但是我们决定升级tomcat版本。

最新更新