2014-05-13 92 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重新啓動,一切竄出生活。

祝你好運