Mit den beiden folgenden Klassen habe ich versucht, eine Verbindung zu einer MySQL-Datenbank herzustellen. Allerdings bekomme ich immer diesen Fehler:
Wed Dec 09 22:46:52 CET 2015 WARNUNG: Das Herstellen einer SSL-Verbindung ohne Überprüfung der Serveridentität wird nicht empfohlen. Gemäß den Anforderungen von MySQL 5.5.45+, 5.6.26+ und 5.7.6+ muss die SSL-Verbindung standardmäßig hergestellt werden, wenn keine explizite Option festgelegt ist. Für die Kompatibilität mit vorhandenen Anwendungen, die kein SSL verwenden, ist die verifyServerCertificate-Eigenschaft auf "false" gesetzt. Sie müssen entweder SSL explizit deaktivieren, indem Sie useSSL = false festlegen, oder useSSL = true festlegen und einen Truststore für die Überprüfung des Serverzertifikats bereitstellen.
Dies ist die Testklasse mit der Methode main
:
public class TestDatabase {
public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
Dies ist die Klasse Database
:
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.SQLException;
public class Database {
private Connection con;
public void connect() throws Exception{
if(con != null) return;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new Exception("No database");
}
String connectionURL = "jdbc:mysql://localhost:3306/Peoples";
con = DriverManager.getConnection(connectionURL, "root", "milos23");
}
public void close(){
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Ihre Verbindungs-URL sollte wie folgt aussehen:
jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
Dadurch wird SSL deaktiviert und die SSL-Fehler werden unterdrückt.
Wie wäre es, wenn Sie SSL verwenden, aber die Serverüberprüfung deaktivieren (z. B. im Entwicklungsmodus auf Ihrem eigenen Computer):
jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true
erwähne das url
wie:
_jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false
_
wenn Sie in der XML-Konfiguration das Zeichen & angeben, wird der folgende Fehler in IDE angezeigt:
_The reference to entity "useSSL" must end with the ';' delimiter.
_
und dann müssen Sie explizit &
anstelle von &
verwenden, um &
zu bestimmen von xml
danach in xml
muss die url in xml wie folgt konfiguriert werden:
_<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false</property>
_
Eine alternative Methode wäre:
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "milos23);
properties.setProperty("useSSL", "false");
properties.setProperty("autoReconnect", "true");
try (Connection conn = DriverManager.getConnection(connectionUrl, properties)) {
...
} catch (SQLException e) {
...
}
Ich glaube jedoch nicht, dass die Einstellung für die automatische Neuverbindung erforderlich ist, um die Warnung zu entfernen.
sie müssen Ihren MySQL-Pfad folgendermaßen verwenden:
<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>
Ich habe diese Warnung auch gefunden und sie dann behoben, indem ich SSL = false als Suffix für die Verbindungszeichenfolge verwendet habe, wie in diesem Beispielcode.
Beispiel:
connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"
Verwenden Sie diese Option, um das Problem in Hive zu lösen, während Sie eine Verbindung mit MySQL herstellen
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false</value>
<description>metadata is stored in a MySQL server</description>
</property>
Das war OK für mich:
this.conn = (Connection)DriverManager
.getConnection(url + dbName + "?useSSL=false", userName, password);
Ich benutze diese Eigenschaft für den Ruhezustand in config xml
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useSSL=false
</property>
ohne - serverTimezone = UTC - funktioniert es nicht
Lösung Um das Problem zu beheben, fügen Sie am Ende der MySQL-Verbindungszeichenfolge useSSL = false hinzu:
ex.
application.properties
spring.datasource.url=jdbc:mysql://localhost/dbname?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
die neuen Versionen von MySQL-Connector stellen standardmäßig eine SSL-Verbindung her ... um das Problem zu lösen:
Laden Sie die ältere Version von mysql-connector wie mysql-connector-Java-5.0.8.Zip herunter
. . oder . . Laden Sie OpenSSL für Windows herunter und befolgen Sie die Anweisungen zum Festlegen