2014-05-13 93 views
2

我想在我的Tomcat服务器上实现连接池。这里是我的context.xml文件(WebContent/META-INF/context.xml下放置:Tomcat 7.0连接池 - jdbc驱动程序异常

<Context path="/evappserver" reloadable="true"> 
    <Resource 
      name="jdbc/evapp" 
      auth="Container" 
      type="javax.sql.DataSource" 
      factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
      initialSize="34" 
      maxActive="377" 
      maxIdle="233" 
      minIdle="89" 
      timeBetweenEvictionRunsMillis="34000" 
      minEvictableIdleTimeMillis="55000" 
      validationQuery="SELECT 1" 
      validationInterval="34" 
      testOnBorrow="true" 
      removeAbandoned="true" 
      removeAbandonedTimeout="55" 
      username="root" 
      password="" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/evapp?allowMultiQueries=true" 
    /> 
</Context> 

我有一个行家项目,所以MySQL JDBC驱动程序通过pom.xml文件导入,就像这样:

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.6</version> 
</dependency> 

这里是我的Java代码引发异常:

Context initContext = new InitialContext(); 
    Context envContext = (Context) initContext.lookup("java:/comp/env"); 
    dataSource = (DataSource) envContext.lookup("jdbc/evapp"); //here is the exception 

H ere是个例外:

May 13, 2014 10:39:58 AM org.apache.naming.NamingContext lookup 
WARNING: Unexpected exception resolving reference 
java.sql.SQLException: com.mysql.jdbc.Driver 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:634) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:488) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) 
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539) 
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237) 
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143) 
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:168) 
    at com.evappserver.dblayer.DBType.<init>(DBType.java:62) 
    at com.evappserver.dblayer.MySqlDB.<init>(MySqlDB.java:16) 
    at com.evappserver.logiclayer.BaseLogic.getMainDbConnection(BaseLogic.java:19) 
    at com.evappserver.logiclayer.PasswordLoginLogic.doLogin(PasswordLoginLogic.java:27) 
    at com.evappserver.servlets.PasswordLoginServlet.doGet(PasswordLoginServlet.java:37) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:266) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) 
    ... 38 more 

这个配置有什么问题吗?

回答

2

我想你应该在你的tomcat/lib文件夹中包含MySQL的驱动程序,而不是将它与你的Web应用程序一起部署。这样服务器就会找到适当的类来实例化你的连接池,一切都会好起来的。

+0

这个文件夹位于何处? '的WebContent \ WEB_INF \ lib'? – vlio20

+0

不,应该在Tomcat服务器目录中有一个/ lib目录。 –

+0

没有这样的目录。我应该创建一个并删除pom.xml中的依赖关系吗? – vlio20

1

检查项目的类路径是否包含文件mysql-connector-java-5.1.6.jar。 maven运行没有问题吗?

+0

是的,那里是!在我开始构建池化机制之前,我有普通的连接,并且它工作正常... – vlio20

+0

您可以尝试将MySQL二进制jar添加到应用程序的WEB-INF/lib目录 – sziolkow

-1

我有这个相同的问题。对于一种原因不明的我,投入WEB-INF/libmysql-connector-java*.jar在Ubuntu LTS不再起作用14.04

我解决它通过复制该文件(仅此文件)/usr/share/tomcat7/lib并重新启动tomcat7作为服务服务tomcat7重新启动,一切窜出生活。

祝你好运