mysql - 将项目部署到Tomcat后找不到com.mysql.jdbc.Driver

标签 mysql eclipse tomcat jdbc

我在 Eclipse 中有一个 Web 项目,它使用到我的 mysql 数据库的连接。

我将项目导出为 .WAR 文件并将其部署到 tomcat 服务器的另一台计算机上。该机器上还有 mysql 数据库。

我这样做:

envContext = new InitialContext();
DataSource ds = (DataSource) envContext.lookup( "java:comp/env/jdbc/Database" );
con = ds.getConnection();

我的Context.xml:

<Resource name="jdbc/Database" auth="Container"
        type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="user"
        password="pw"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/databasename"/>

但我收到此错误:

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:701)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
    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:554)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242)
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at bachelor.Cronjob.run(Cronjob.java:63)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThr$
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPool$
    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:745)
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:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:278)
        at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
        ... 29 more

在“WEB-INF/lib”文件夹中,我得到了“mysql-connector-java-5.1.35-bin.jar”。

有谁知道为什么它在 eclipse 中工作但在另一台机器上的 tomcat 中不起作用?非常感谢!

最佳答案

我几乎可以肯定,如果您使用 Context.xml 中定义的 JNDI 数据源,则数据库驱动程序必须位于 $CATALINA_HOME/lib 中,即它不是足以将其放在 WEB-INF/lib 中。

(某些 Tomcat 安装具有不同的 CATALINA_HOMECATALINA_BASE,因此,如果您找不到正确的 lib 文件夹,那么可能是最简单的方法找到运行 ps axwww | grep -i catalina 命令的位置,然后查找 -Dcatalina.home=... 选项。)

关于mysql - 将项目部署到Tomcat后找不到com.mysql.jdbc.Driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126139/

相关文章:

MYSQL:用户标识的计数类型

mysql - 我可以从 MySQL 数据库备份中恢复一张表吗?

java - 运行应用程序时似乎无法输入任何整数值?它只显示结果 "grade c"

java - 用java读取乌尔都语文件

tomcat - Office 2007 MIME 类型的问题,它们在 IE 所有其他浏览器中下载为 *.zip 正常

mysql - SQL 查询中的 MAX() 和 `group by` 问题

mysql - 如何在select语句中获取变量值作为表名

由于 'A resource exists with a different case' 错误,Eclipse 项目未在 Mac 上构建

java - Tomcat JNDI : managed stack of objects

jakarta-ee - AsyncContext 和 I/O 错误处理(当对等断开连接时)