我尝试了几种不同的方式,以便Tomcat在运行我的Web应用程序时加载MySQL驱动程序。我正在使用Ubuntu 8.04,这些库来自libmysql-java包。它们位于以下目录中:
~$ ls /usr/share/java/mysql* /usr/share/java/mysql-connector-java-5.1.5.jar
我的CLASSPATH包含以下文件:
~$ echo $CLASSPATH .:/usr/lib/jvm/java-6-sun/bin:/usr/local/tomcat/lib/servlet-api.jar:/usr/share/java/mysql-connector-java-5.1.5.jar
我甚至在我的网络应用程序的WEB-INF / lib /目录中放了.jar文件的副本:
/usr/local/tomcat/webapps/ohms/WEB-INF/lib$ ls mysql-connector-java-5.1.5.jar
进行这些更改后,我重新启动Tomcat,重新编译我的类,再次重启Tomcat。另外,我使用import java.sql.*;
但是,当它运行第java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
行
Class.forName("com.mysql.jdbc.Driver").newInstance();
错误
我在这里做错了什么?
答案 0 :(得分:2)
将它放在TOMCAT_HOME / lib中。 (我似乎记得在早期版本的Tomcat上,它是TOMCAT_HOME / server / lib?)
它不能在WEB-INF / lib中工作,因为容器需要访问库,并且它将它放在一个Web应用程序的类加载器中,而不是容器中。虽然我会想象CLASSPATH方法会起作用,但这不是标准的方法。也许还有一些阻碍它工作的障碍。
答案 1 :(得分:1)
Tomcat忽略任何CLASSPATH环境变量,所有Java EE应用服务器和IDE也是如此。这对你没有好处。我没有在我使用的任何机器上设置一个。
JAR需要在Tomcat服务器/ lib中用于Tomcat 5.x和/ lib用于6.x.
您无需调用newInstance(); Class.forName(“com.mysql.jdbc.Driver”)足以注册驱动程序类。
答案 2 :(得分:1)
将mysql连接器复制到/ usr / share / tomcat7 / lib
答案 3 :(得分:1)
如果您不想将文件放入Tomcat lib目录,您可能想要做的另一件事。它在catalina.sh中声明它将检查setenv.sh以查找包含外部jar的变量集。例如,正如我所做的那样,您可以创建此文件:
$CATALINA_HOME/bin/setenv.sh
内容:
CLASSPATH=lib/mysql-connector-java-5.1.33-bin.jar
jar的路径将相对于启动Tomcat的位置,也称为工作目录。所以,例如,在我的情况下,我从一个Ant脚本启动Catalina,从$ CATALINA_HOME开始两级,我的lib目录直接位于该点之下。