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

时间:2018-03-23 18:09:44

标签: 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 build

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文件在与我的应用程序打包时被忽略或未加载。尽管如此,它只是一些应用程序。我有其他应用程序可以正常使用随应用程序打包的lib。

1 个答案:

答案 0 :(得分:1)

我确定。这不是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在最新版本中已更改。

希望这会对你有所帮助。