tomcat 7 jdbc pool 数据库连接池报错,找不到数据源

拉布拉多 发布于 2013/05/02 08:38
阅读 3K+
收藏 1

听说tomcat 7 有了新的jdbc pool 性能不错,我就参照网上的资料配置了下,结果报错了。

server.xml增加:


<Resource name="jdbc/test" auth="Container" 
type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
 testWhileIdle="true" testOnBorrow="true" testOnReturn="false" 
validationInterval="30000" timeBetweenEvictionRunsMillis="30000" maxActive="100" 
minIdle="10" maxWait="10000" initialSize="10" removeAbandonedTimeout="60" 
removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" 
jmxEnabled="true" 
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
 username="root" password="123" driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/test"/>
然后 context.xml 增加:



<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
代码中这么写:



import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
//省略部分代码
private Connection initConnection(){
                try {
                        context = new InitialContext();
                } catch (NamingException e) {
                        System.err.println("连接池上下文失败 " + e.getMessage());
                }
                try {
                        ds = (DataSource)context.lookup("java:comp/env/jdbc/test");
                } catch (NamingException e) {
                        System.err.println("数据源不存在 " + e.getMessage());
                }
结果报错了,错误



WARNING: Unexpected exception resolving reference
java.sql.SQLException: com.mysql.jdbc.Driver
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
。。。
数据源不存在! com.mysql.jdbc.Driver
确认jar包是存在的。


而我按照传统的DBCP的配置是可以的

context.xml增加:


<Resource name="jdbc/test" auth="Container"
              type="javax.sql.DataSource" Factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
                  maxActive="80" maxIdle="20" maxWait="10000" removeAbandoned="true"
              username="root" password="123"
                          driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test" />
/WEB-INF/web.xml增加:



<resource-ref>
    <description>Tomcat 7 DBCP</description>
    <res-ref-name>jdbc/test</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
这么配是可以的,但是我想要的tomcat 7里最新的jdcb pool配置,而不是DBCP。看了官方文档,找了很多资料也不是很明白。求达人指点。是不是我理解问题。


@红薯 @Jfinal @缪斯的情人


加载中
0
缪斯的情人
缪斯的情人
看异常是驱动没有加载到,你是不是把mysql驱动包放到了 /WEB-INF/lib 中了,这对于tomcat的common类加载器来说是加载不到的,你可以试试把驱动包放到tomcat的lib目录下,你先试试行不行吧
白起
白起
果真如此啊,话说我在网上找了好久没找到答案。我就觉得非常的奇怪,因为我写了个测试类,直接作用java应用程序运行,结果能正常读取数据库,可是,当放到web中,却又不能运行,坑死我了!
ITFrank
ITFrank
非常正确
0
拉布拉多

引用来自“缪斯的情人”的答案

看异常是驱动没有加载到,你是不是把mysql驱动包放到了 /WEB-INF/lib 中了,这对于tomcat的common类加载器来说是加载不到的,你可以试试把驱动包放到tomcat的lib目录下,你先试试行不行吧
果然如此啊,感激涕零
0
DW_GYT
DW_GYT
同意LZ,放在tomcat的LIB下就应该可以了
0
我已经报警了
我已经报警了

/WEB-INF/lib下面已经是应用程序app的库了

tomcat加载连接池是取自己的lib库

返回顶部
顶部