我遇到了 Java 8、MySQL Server 5.7.23、MySQL Connector for Java v5.1.45 和 Tomcat v9.0.12(在 Ubuntu Server 18.04 上运行)的问题。我已经构建了一个简单的 Java 应用程序 (war),它在 MySQL 数据库中执行查询。我的context.xml(我放了2个资源节点,一个用于生产环境,一个用于开发环境),从实际应用场景中我从CATALINA_OPTS中读取了一个名为“env”的参数并使用System.getProperty(“env”)读取它,应用程序可以选择合适的数据源来使用。我以这种方式设置了 MySQL 权限(我还需要允许“dbuser”的外部访问,因为我有一个连接到这个 MySQL 数据库的外部客户端):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'veryStrongPwd';CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbUserPwd!';GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' IDENTIFIED BY 'dbUserPwd!' WITH GRANT OPTION;FLUSH PRIVILEGES;Tomcat 没有任何特定的配置或资源配置,它只是解压到一个文件夹中的 v9.0.12。我试图在 context.xml 中放入“root”和“dbuser”凭据,但是当我启动 Tomcat 时,出现以下问题:ConnectionPool.init Unable to create initial connections of pool. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)...在抛出这些例外之后,它会打印记录集,但为什么即使在 context.xml 中我设置了 dbuser 凭据,它也需要 root 登录?
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
在您context.xml
的root
用户密码为root
. 在您的 MySQL 脚本中,您已将root
用户密码设置为veryStrongPwd
.
如果您的问题更多是关于为什么即使您不使用也会出现错误Resource
- 您将连接池的最小大小设置为3
. 所以Tomcat会创建连接池,并尝试在启动时添加3个连接。或许,如果你设置minIdle
到0
它的工作,你怎么想。
更新
还有另一个设置 -initialSize
默认为 10。将其设置为 0 应该会阻止 Tomcat 在启动时尝试使用该数据源。
添加回答
举报
0/150
提交
取消