mysql - Grails:ClassNotFoundException:WAR 部署中的 com.mysql.jdbc.Driver

标签 mysql tomcat grails gradle

这是一个最近才开始发生的问题,并且仅与特定项目和 WAR 部署有关。我无法部署 WAR 文件,因为出现以下异常

ERROR org.apache.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.
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:712)
 [.....]
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)

自上次成功部署(我使用 git 验证)以来,我的项目中没有任何变化,并且我可以使用 Spring Boot 正常运行该项目。

mysql-connector 在我的 gradle 构建中

runtime 'mysql:mysql-connector-java:5.1.46'(我也尝试更改为compile)

我在 application.yml 中正确声明了驱动程序

dataSource:
    pooled: true
    jmxExport: true
    driverClassName: com.mysql.jdbc.Driver
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    username: ****
    password: ****

environments:
    production:
        dataSource:
          password: *****
          dbCreate: none
          url: jdbc:mysql://localhost:3306/myapp

我正在使用 Intellij IDE,并且可以确认 mysql-connector 已在我的类路径中列出,并且当我分解 WAR 文件时 mysql-connector-java-5.1.46.jar 已在我的类路径中列出WEB-INF/lib

我已经对该项目进行了多次清理和重建。我真的对正在发生的事情感到茫然,正如前面提到的它唯一的具体项目。我还有其他具有相同配置设置的 grails 项目,并且部署得很好,但其他一些项目却给了我这个错误。有什么想法吗?

Tomcat:7.0.70

Java:1.8.0_91

MySQL:5.6 和 5.7(两者均失败)

Grails:3.3.1

更新: 因此,如果我将 mysql jar 放在 Tomcat lib 文件夹而不是项目 lib 文件夹中,那么它就可以工作。这样就证明了JAR文件是有效的。当我将 JAR 文件放回到应用程序的 WEB-INF/lib 文件夹中时,它不起作用。因此,似乎由于某种原因,JAR 文件在与我的应用程序打包时被忽略或未加载。不过,这只是一些应用程序。我还有其他应用程序可以与应用程序打包的库配合使用。

最佳答案

我确定。这不是jar文件的问题。

您可以查看here in repohere适用于所有版本的 MySQL 连接器

请验证您的依赖项 runtime "mysql:mysql-connector-java:5.1.46"

验证您的系统 MySQL 服务器用户和密码以及 dataSource用户名,密码。

使用有效的凭据验证您的 MySQL 运行正常。

因为ERROR org.apache.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.当 MySQL 未在系统上运行或用户名密码无效时,就会出现此错误。

还有一种可能的错误: 如果您已经更新了 MySQL 版本。它将尝试安全连接。 所以你需要向 URL mysql://localhost:3306/yourDb?autoReconnect=true&useSSL=false&useUnicode=true 传递一些参数

如果问题没有解决,最后一个选项: 使用最新版本更新您的依赖项和配置。

依赖供引用: runtime "mysql:mysql-connector-java:6.0.6"

Application.yml

dataSource:
                dbCreate: update
                pooled: true
                url: jdbc:mysql://localhost:3306/YourDb?autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
                driverClassName: com.mysql.cj.jdbc.Driver
                dialect: org.hibernate.dialect.MySQL5InnoDBDialect
                username: yourUsername
                password: yourPassword
                properties:
...

driverClassName最新版本已更改。

希望这对您有帮助。

关于mysql - Grails:ClassNotFoundException:WAR 部署中的 com.mysql.jdbc.Driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455956/

相关文章:

php - 如何在没有多次查询的情况下确定两个用户是否共享某些信息

tomcat - jakarta.servlet.ServletException : Class [com. practice.MyServlet] 不是 Servlet

tomcat - 注册期间 SymmetricDS 错误 404

mysql - 如何在MySQL数据库中存储Paypal小数金额

mysql - SQL 插入或更新

java - Tomcat servlet 中的 ThreadLocal

grails - 比较为gsp中的int

grails - 用于 Grails 的 Vaadin 插件已安装,但代码完成不起作用

data-binding - Grails 数据绑定(bind)

php - 数据库连接失败