【问题标题】:Tomcat 7.0 Connection pooling - jdbc driver exceptionTomcat 7.0 连接池 - jdbc 驱动程序异常
【发布时间】:2014-06-30 18:49:07
【问题描述】:

我想在我的 Tomcat 服务器上实现连接池。这是我的 context.xml 文件(放在WebContent/META-INF/context.xml:

<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> 

我有一个ma​​ven项目,所以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

这是一个例外:

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

这个配置有问题吗?

【问题讨论】:

    标签: java mysql maven tomcat jdbc


    【解决方案1】:

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

    【讨论】:

    • 这个文件夹到底在哪里? WebContent\WEB_INF\lib?
    • 不行,Tomcat服务器目录下应该有/lib目录。
    • 没有这样的目录。我应该创建一个并从 pom.xml 中删除依赖关系吗?
    • 这看起来很奇怪。请注意,我不是在谈论您的 Eclipse(如果您使用 Eclipse)项目,而是在谈论安装 Tomcat 服务器的目录。请查找它,因为它应该有一个 /lib 文件夹,您可以在其中放置定义连接池所需的任何 JDBC 驱动程序。是的,一旦你这样做了,如果你对纯 JDBC 接口进行编程,你就不需要 pom.xml 中的依赖项
    • 我想我不知道在哪里可以找到它。在 Eclipse(我确实使用)中,我有 servers 文件夹,在它下面的 tomcat 服务器的名称是“Tomcat v7.0 ...”。我在哪里可以找到您所说的指令?
    【解决方案2】:

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

    【讨论】:

    • 是的,有!在我开始构建池机制之前,我有普通的连接,它工作得很好......
    • 可以尝试将MySQL二进制jar添加到应用程序WEB-INF/lib目录
    【解决方案3】:

    我遇到了同样的问题。由于我不知道的原因,将 mysql-connector-java*.jar 放入 WEB-INF/lib 不再适用于 Ubuntu LTS 14.04

    我通过将此文件(以及仅此文件)复制到 /usr/share/tomcat7/lib 并重新启动 tomcat7 作为服务 service tomcat7 restart 来解决它,一切都恢复了活力。

    祝你好运

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2019-07-18
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多