这个问题最近才刚刚开始发生,并且仅在特定项目和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(两者均失败)
Cereal :3.3.1
更新:
因此,如果我将mysql jar放在我的Tomcat lib文件夹而不是我的项目lib文件夹中,那么它将起作用。这样就证明了JAR文件是有效的。当我将JAR文件放回我的应用程序的WEB-INF / lib文件夹中时,它不起作用。因此,由于某种原因,与我的应用程序打包时,JAR文件似乎被忽略或未加载。同样,它只是一些应用程序。我还有其他应用程序可以很好地与该应用程序打包的lib一起工作。
最佳答案
我确定。这不是jar文件的问题。
您可以检查here in repo和here以获取所有版本的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
已更改为最新版本。希望这对您有帮助。