2016-06-30 41 views
1

我在Eclipse中有一个webproject,它使用到我的mysql数据库的连接。将项目部署到Tomcat后未找到com.mysql.jdbc.Driver

我将项目导出为.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?非常感谢!

+0

导致异常的确切代码是什么?你能包含更多的堆栈跟踪吗? –

+0

@TimBiegeleisen:请参阅我的编辑。 – progNewbie

+0

用任何'zip'提取工具打开'.war'文件,并检查它是否包含'mysql-connector.jar'文件。如果不存在那可能是一个问题。你的错误日志指出没有找到mysql连接的类。 – Shashanth

回答

2

我几乎可以肯定的是,如果你使用Context.xml定义JNDI数据源,数据库驱动程序必须是在$CATALINA_HOME/lib,即它是不够的,有它在WEB-INF/lib

(有些Tomcat的安装有不同的CATALINA_HOMECATALINA_BASE,因此,如果您不能找到合适的lib文件夹,然后可能是最简单的方式找到在那里是运行ps axwww | grep -i catalina命令,然后去寻找-Dcatalina.home=...选项。)