哪里有地方Tomcat的连接池的JDBC驱动程序?(Where do I have to place

2019-06-18 18:22发布

所以,我已经想通了,我的错误,现在我只是在寻找一些有识之士来究竟是什么回事。 我使用的Apache Tomcat版本7.0.32。 我使用本教程设置为池JDBC。 在我的META-INF文件夹,我做了一个context.xml文件,并把这个在那里。

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Resource type="javax.sql.DataSource" name="jdbc/gmustudent"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/official"
        username="root" password="root"
        maxActive="100" maxIdle="20" minIdle="15" initialSize="15" maxWait="10000" />
</Context>

我得到这个错误,当我写这

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:699)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:631)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:485)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
    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: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:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    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:680)
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:246)
    ... 29 more
Oct 31, 2012 11:23:25 AM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: com.mysql.jdbc.Driver
Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8086"]
Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Oct 31, 2012 11:23:25 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 794 ms

当我在我的context.xml文件这一说法该错误只出现。 当我删除它没有错误。

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 

究其原因我想确保我拥有它是因为在Apache Tomcat上的教程,它说

factory is required, and the value should be org.apache.tomcat.jdbc.pool.DataSourceFactory

于是我做了一点点研究对SO,发现一个帖子说你需要添加这个瓶子 ,如果你已经在使用Tomcat的旧版本到你的lib文件夹。 所以我加了罐子,现在,它的作品,但我想有一些信息,以什么在地球上是怎么回事,因为我使用的是最新版本的Tomcat。 那么,为什么当我指定一家工厂做我得到一个错误。 什么是这个罐子是我添加的,为什么有它非常小的文件? 关于什么是这里发生的任何信息,将不胜感激。

Answer 1:

JDBC驱动程序必须是相同的类加载器作为数据源工厂本身可见。 数据源工厂库被放置在Tomcat的自己/lib的文件夹,从而通过Tomcat的“共同的”类加载器加载。

你的问题听起来很像您在Web应用程序的下降JDBC驱动程序/WEB-INF/lib 。 web应用程序的/WEB-INF/lib是不可见的“共同”类加载器。 因此从技术上讲,你必须把Tomcat的自己的JDBC驱动程序/lib文件夹(或者,至少,在配置路径由指定common.loader在设置/conf/catalina.properties ),以使其数据可见源厂。

或者,当你尝试,复制数据源工厂到/WEB-INF/lib也将修复它。 web应用程序的/WEB-INF/lib在类装入比Tomcat的即更高的优先级/lib文件夹中。 因此,如果数据源工厂中发现的/WEB-INF/lib ,它将被从那里加载。 由于JDBC驱动程序也有,可以看出。 然而,这不是你的具体问题的解决方案,这更是一个解决方法,所以你不应该这样做。

没有到底哪个是专门针对这个问题的文件。 在Tomcat的类装载器HOW-TO会理解Tomcat中的类加载层次不过帮助。

也可以看看:

  • 臭名昭著的值java.sql.SQLException:未找到合适的驱动程序
  • 我应该如何连接到JDBC数据库/数据源在基于Servlet的应用程序?
  • 它是安全的在多线程系统中使用静态java.sql.Connection中的实例?


Answer 2:

我有同样的问题,您的解决方案并没有为我工作。 我不得不把“使用mysql-connector-java的5.1.30-bin.jar”文件添加到我的lib文件夹,它的工作,因为我是使用该驱动程序:)干杯。



文章来源: Where do I have to place the JDBC driver for Tomcat's connection pool?