java - 如何诊断 MySQL JDBC 驱动程序的 ClassNotFound 异常

标签 java mysql tomcat

我的 webapp 无法连接到 MySQL,失败并出现错误:

引起:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

现在 mysql 连接器 jar 显然在我的类路径中:mysql-connector-java-5.0.7-bin.jar,在 WEB-INF/lib 目录中。

所以说“找不到”是没有意义的。我猜它一定是某些静态初始化失败了。

有什么方法可以诊断这个问题吗?

最佳答案

虽然我没有想出任何好的诊断实用程序,但除了堆栈跟踪之外,我确实意识到发生了什么。堆栈跟踪自然有线索:

Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)

DataSource 是在 Web 应用程序的 context.xml 文件中定义的,这意味着驱动程序由 Tomcat 使用父类加载器加载到 Web 应用程序。该类加载器无权访问应用程序的类路径。

解决办法是把mysql jar放到Tomcat的共享库目录下。

另一种解决方案是将 DataSource 嵌入到应用程序中,而不是使用 Tomcat 的 DataSource 管理,从而允许 Tomcat 发行版。

关于java - 如何诊断 MySQL JDBC 驱动程序的 ClassNotFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332026/

相关文章:

apache - 如何生成和配置 ETag?

java - SQLite 中的 ListView 显示异常

java - 在java中将 float 转换为具有相同位表示形式的整数?

php - Laravel 跟踪一行中的单个单元格

jsp - 如何检测哪个 jsp 包含在 Web 应用程序中使用的网页

java - IntelliJ IDEA 14.1.3 Ultimate : Application Server was not connected before run configuration stop, 原因:无法在 localhost:1099 ping 服务器

java - 如何将 Field(Reflection) 的值设置为 POJO?

java - 具有 url 别名的空 session

php - mySQL按一定的ID排列。缺少一行数据

mysql - 加入或包含 null