这是一个最近才开始发生的问题,它只存在于特定的项目和 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 连接器在我的 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连接器列在我的类路径中,当我爆炸我的WAR文件时,mysql-connector-java-5.1.46.jar
列在我的WEB-INF/lib
我已经对项目进行了多次清理和重建。 我真的对正在发生的事情感到茫然,正如所提到的,它唯一的具体项目。 我还有其他具有相同配置设置的 grails 项目并且部署得很好,但其他一些项目给了我这个错误。 有什么想法吗?
雄猫:7.0.70
爪哇:1.8.0_91
MySQL:5.6 和 5.7(两者都失败)
圣杯:3.3.1
更新:因此,如果我将我的 mysql jar 放在我的 Tomcat 库文件夹中而不是我的项目库文件夹中,那么它可以工作。 因此,这证明了JAR文件是有效的。 当我将JAR文件放回应用程序的WEB-INF/lib文件夹中时,它不起作用。 因此,由于某种原因,JAR文件在与我的应用程序打包时似乎被忽略或未加载。 同样,它只是一些应用程序。 我还有其他应用程序可以与应用程序一起打包的库很好地工作。
>我敢肯定。这不是 jar 文件的问题。
您可以在存储库中查看此处,在此处查看所有版本的MySQL连接器
请验证您的依赖项runtime "mysql:mysql-connector-java:5.1.46"
验证您的系统MySQL服务器用户和密码以及dataSource
用户名,密码。
使用有效凭据验证您的 MySQL 运行良好。
因为当MySQL未在系统上运行或用户名密码无效时ERROR org.apache.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.
会出现此错误。
还有一种错误的可能性: 如果您已更新 MySQL 版本。它将尝试安全连接。 因此,您需要将一些参数传递给URLmysql://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
已在最新版本中更改。
希望这对你有帮助。