我遇到了 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個連接?;蛟S,如果你設置minIdle
到0
它的工作,你怎么想。
更新
還有另一個設置 -initialSize
默認為 10。將其設置為 0 應該會阻止 Tomcat 在啟動時嘗試使用該數據源。
添加回答
舉報
0/150
提交
取消