【问题标题】:Tomcat7 JDBC poolsTomcat7 JDBC 池
【发布时间】:2012-06-09 23:24:18
【问题描述】:

我在 META-INF 中有以下内容

<Context>
   <Resource type="javax.sql.DataSource"
        name="jdbc/TestDB"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/"
        username="mysql_user"
        password="mypassword123"/>
</Context>

在我的 web.xml 中有

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

在我的 Java 代码中,我有

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource datasource = (DataSource)envContext.lookup("jdbc/TestDB");
con = datasource.getConnection();

当 Tomcat 启动时,我收到以下错误,并且我的 libs 文件夹中有 mysql-connector-java-5.1.20-bin.jar。知道为什么吗?

INFO: Starting Servlet Engine: Apache Tomcat/7.0.27
05-Jun-2012 23:16:29 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:242)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:175)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:684)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:616)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:135)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:114)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:101)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:501)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:224)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
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 org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:235)
... 29 more

【问题讨论】:

  • 你有没有想过这个问题?我遇到了完全相同的问题:(请告诉我。谢谢。
  • 也有这个问题...很奇怪!

标签: java mysql servlets amazon-web-services tomcat7


【解决方案1】:

我在 Ubuntu 上通过 apt-get 机制安装了 Tomcat7 时遇到了这个问题。问题是 Tomcat 使用的 dbcp,更具体地说是 commons-dbcp.jar 而不是 tomcat-dbcp.jar。

为了解决这个问题,我从 tomcat 站点下载的 Tomcat7 副本中提取了catalina*.jartomcat-dbcp.jar,并替换了 tomcat 的 lib 文件夹中的文件。 (commons-dbcp.jar 替换为tomcat-dbcp.jar)。

this link

【讨论】:

    【解决方案2】:

    您缺少 MySQL 的 JDBC 驱动程序。

    从 MySQL 的网站下载它们:http://dev.mysql.com/downloads/connector/j/

    将驱动程序添加到您的类路径、项目或 Tomcat 的 HOME\lib 目录。

    【讨论】:

    • 我的应用程序库目录中有 mysql-connector-java-5.1.20-bin.jar。我知道 mysql-connector-java-5.1.20-bin.jar 被选中,因为我有其他不使用 JDBC 池的 servlet 并且它们可以工作。与启动有关?
    • 是的,运行应用程序时可能正在加载其他配置文件。尝试将 MySQL 驱动程序添加到您的 CLASSPATH 或 Tomcat 的 HOME\lib 目录。如果可行,那么您已将其范围缩小到配置。
    • 如何将 mysql 添加到类路径中?我是 Tomcat / Web 应用程序的新手。我也在 Amazon BeanStalk 上运行它,所以我无法访问 tomcat
    • 在这种情况下,请按照本指南在 BeanStalk 上设置 MySQL:docs.amazonwebservices.com/elasticbeanstalk/latest/dg/…
    • 所以我将 mysql-connector-java-5.1.20-bin.jar 添加到 Tomcat 的 HOME\lib 目录中,并且它工作正常。所以似乎在启动时读取 context.xml tomcat 无法读取 web-inf/lib jar 或者我需要在 context.xml 中引用 mysql jar?
    猜你喜欢
    • 2012-07-02
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2012-07-11
    • 2016-07-06
    • 2013-09-04
    相关资源
    最近更新 更多