2017-05-29 56 views
0

我的春季啓動應用程序在本地主機上運行良好,它已經生活了幾個月的第一個版本工作正常,但現在當我嘗試上傳應用程序的新版本,或任何其他春天啓動的應用程序,我得到以下錯誤:我的春季啓動應用程序的新版本無法連接到mysql

not eligible for auto-proxying) 
 
2017-05-29 17:20:48.565 ERROR 618 --- [   main] o.a.tomcat.jdbc.pool.ConnectionPool  : Unable to create initial connections of pool. 
 

 
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
 
\t at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_131] 
 
\t at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_131] 
 
\t at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_131] 
 
\t at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_131] 
 
\t at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) ~[mysql-connector-java-5.1.6.jar:na] 
 
\t at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310) ~[tomcat-jdbc-8.5.11.jar:na] 
 
\t at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) ~[tomcat-jdbc-8.5.11.jar:na] 
 
\t at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:732) [tomcat-jdbc-8.5.11.jar:na]

下面是我的應用程序屬性文件:

spring.jpa.hibernate.ddl-auto=update 
 

 
# Replace with your connection string 
 
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/appName 
 
spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8; 
 

 
# Replace with your credentials 
 
spring.datasource.username=root 
 
spring.datasource.password=root 
 

 

 
# Keep the connection alive if idle for a long time (needed in production) 
 
spring.datasource.testWhileIdle = true 
 
spring.datasource.validationQuery = SELECT 1 
 

 
spring.datasource.test-on-borrow=true 
 
spring.datasource.connection-test-query=SELECT 1 
 
spring.datasource.tomcat.validation-interval=0 
 
# Number of ms to wait before throwing an exception if no connection is available. 
 
spring.datasource.tomcat.max-wait=10000 
 

 
# Validate the connection before borrowing it from the pool. 
 
spring.datasource.tomcat.test-on-borrow=true 
 

 

 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
 
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 
 

 
# The SQL dialect makes Hibernate generate better SQL for the chosen database 
 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 
 
#server.port = 8081

因此,已經檢查MySQL正在運行,我能夠用工作臺和1個實時應用程序連接到它如前所述,我並沒有把錯誤的用戶名/密碼,或作出申請的任何更改.properties文件導致問題,並且問題僅在Spring引導應用程序中出現,而Spring應用程序運行良好。 我正在使用Jenkins在Tomcat上部署應用程序,上面發佈的錯誤輸出來自jenkins。

回答

0

我把它固定方式:編輯在位於/etc/mysql/mysql.conf mysqlId.cnf文件綁定地址。 d /目錄,看起來像這樣:
綁定地址= 0.0.0.0

和重裝mysql服務之後。

然後,我創建了一個授予新的用戶如下:

CREATE USER '爲myuser' @ 'localhost' 的IDENTIFIED BY '爲mypass'; CREATE USER'myuser'@'%'IDENTIFIED BY'mypass';

GRANT ALL ON TO'myuser'@'localhost'; GRANT ALL ON TO'myuser'@'%';

和沖洗特權:

FLUSH特權;

現金去@apesa you can find more detailed answer here

0

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

這是一個權限問題。您必須使用GRANT權限才能使用給定的用戶名和密碼從該客戶端連接到該主機。我不會建議給任何應用程序root訪問數據庫。爲您的應用程序創建應用程序憑據到特定數據庫。

你讓這個過於複雜。春天,詹金斯,雄貓等不是你的問題。寫一個簡單的main方法做一個JDBC連接,像這樣:

package database.util; 

import org.mariadb.jdbc.MySQLDataSource; 

import javax.sql.DataSource; 
import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

/** 
* Database utilities 
* Created by Michael 
* Creation date 5/3/2016. 
* @link https://stackoverflow.com/questions/36999860/mysql-driver-problems/37000276#comment61553720_37000276 
*/ 
public class DatabaseUtils { 

    public static final String DEFAULT_DRIVER = "org.mariadb.jdbc.Driver"; 
    public static final String DEFAULT_URL = "jdbc:mariadb://localhost:3306/contact"; 
    public static final String DEFAULT_USERNAME = "contact"; 
    public static final String DEFAULT_PASSWORD = "contact"; 
    public static final String DEFAULT_HOST = "localhost"; 
    public static final int DEFAULT_PORT = 3306; 
    public static final String DEFAULT_DATABASE = "contact"; 

    public static void main(String[] args) { 
     Connection connection = null; 
     try { 
      connection = createConnection(DEFAULT_DRIVER, DEFAULT_URL, DEFAULT_USERNAME, DEFAULT_PASSWORD); 
      DatabaseMetaData meta = connection.getMetaData(); 
      System.out.println(String.format("Connected to %s version %s", meta.getDatabaseProductName(), meta.getDatabaseProductVersion())); 
     } catch (ClassNotFoundException | SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      close(connection); 
     } 
    } 

    public static DataSource createDataSource(String host, int port, String database) throws ClassNotFoundException, SQLException { 
     return new MySQLDataSource(host, port, database); 
    } 

    public static Connection createConnection(String driverClass, String url, String username, String password) throws ClassNotFoundException, SQLException { 
     Class.forName(driverClass); 
     return DriverManager.getConnection(url, username, password); 
    } 

    public static void close(Connection connection) { 
     try { 
      if (connection != null) { 
       connection.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void close(Statement st) { 
     try { 
      if (st != null) { 
       st.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void close(ResultSet rs) { 
     try { 
      if (rs != null) { 
       rs.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

它不是一個權限問題,ROOT有*批..嘗試創建並授予新用戶,還是沒有用。用主要方法嘗試,我再次遇到錯誤。 也許我應該提到,我正在將應用程序從一臺服務器部署到另一臺服務器。我解決了這個問題,並且將在下面發佈對我來說是什麼,如果其他人將來需要它的話。 感謝您的回覆。 – Zdrava

相關問題