2017-05-29 5 views
0

Meine Spring-Boot-App läuft gut auf localhost, und die erste Version, die bereits seit ein paar Monaten läuft, funktioniert gut, aber jetzt, wenn ich es versuche laden neue Version der App oder andere Feder Boot apps ich die folgende Fehlermeldung erhalten:Neue Version meiner Spring-Boot-App kann keine Verbindung zu 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]

unten meine Anwendungseigenschaften Datei:

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
mit Werkbank und 1 Live-App

also bereits überprüft, dass mysql läuft, und ich bin in der Lage, um es zu verbinden, wie schon gesagt, ich habe setze nicht falsch Benutzername/Passwort, oder Änderungen an Antrag .properties-Datei, um das Problem zu verursachen, und das Problem tritt nur bei der Spring-Startanwendung auf, während die Spring-Anwendung ordnungsgemäß ausgeführt wird. Ich benutze Jenkins, um die Apps auf Tomcat zu implementieren, und die oben angegebene Fehlerausgabe stammt von jenkins.

Antwort

0

Ich habe es fixiert: Bearbeiten der bind-Adresse in mysqlId.cnf-Datei, die auf /etc/mysql/mysql.conf befindet. d/Verzeichnis, zu sehen wie folgt aus:
bind-Adresse = 0.0.0.0

und Neuladen danach mySQL-Dienst.

Dann habe ich einen neuen Benutzer mit Zuschüssen, wie folgend:

CREATE USER 'myuser' @ BY 'mypass' IDENTIFIED 'localhost'; NUTZER ERSTELLEN 'myuser' @ '%' IDENTIFIED 'Mypass';

GRANT ALLE ON . TO 'myuser' @ 'localhost'; GRANT ALLE ON . NACH 'myuser' @ '%';

und gespült Privilegien:

FLUSH PRIVILEGIEN;

Credits you can find more detailed answer here

0

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

Es ist ein Berechtigungsproblem. Sie müssen GRANT Berechtigungen haben, um von diesem Client mit dem angegebenen Benutzernamen und Passwort zu diesem Host eine Verbindung herzustellen. Ich würde nicht empfehlen, irgendeiner Anwendung Root-Zugriff auf eine Datenbank zu geben. Erstellen Sie Anmeldeinformationen für eine bestimmte Datenbank für Ihre App.

Sie haben dies zu kompliziert gemacht. Frühling, Jenkins, Tomcat, etc. sind nicht dein Problem. Schreiben Sie eine einfache Hauptmethode, um eine JDBC-Verbindung herzustellen, wie folgt aus:

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

Es ist kein Berechtigungsproblem @apesa geht, hat ROOT * Zuschuss .. versucht, das Erstellen und einen neuen Benutzer gewährt, noch keinen Gebrauch. Versucht mit der Hauptmethode, wieder bekomme ich einen Fehler. Vielleicht sollte ich erwähnen, dass ich die App von einem Server zu einem anderen bereitstellen werde.Ich habe das Problem behoben und werde posten, was es für mich getan hat, wenn es jemand anderes in der Zukunft benötigt. Danke für die Antwort. – Zdrava

Verwandte Themen