以下の2つのクラスで、MySQLデータベースに接続しようとしました。しかし、私はいつもこのエラーが出ます:
Wed Dec 09 22:46:52 CET 2015警告:サーバーのIDを確認せずにSSL接続を確立することはお勧めできません。 MySQL 5.5.45以降、5.6.26以降、および5.7.6以降の要件によると、明示的なオプションが設定されていない場合は、デフォルトでSSL接続を確立する必要があります。 SSLを使用しない既存のアプリケーションとの互換性のために、verifyServerCertificateプロパティは 'false'に設定されています。 useSSL = falseを設定して明示的にSSLを無効にするか、useSSL = trueを設定してサーバー証明書の検証用のトラストストアを提供する必要があります。
これはmain
メソッドを持つテストクラスです。
public class TestDatabase {
public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
これは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();
}
}
}
}
接続URLは以下のようになります。
jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
これにより、SSLが無効になり、SSLエラーも抑制されます。
SSLを使用してサーバーの検証をオフにする方法(自分のコンピューターで開発モードになっている場合など):
jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true
代替方法は次のとおりです。
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) {
...
}
ただし、警告を削除するために自動再接続設定が必要とは思われません。
url
のように記述します。
jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false
しかし、xml設定で & signに言及すると、IDEの下にエラーが表示されます。
The reference to entity "useSSL" must end with the ';' delimiter.
それから&
の代わりに&
を明示的に使用して&
にし、その後xml
でxml
にURLを指定する必要があります。この:
<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false</property>
あなたはこのようにあなたのmysqlパスを使用する必要があります:
<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>
私はこの警告も見つけました、それから私はこの例のコードのように接続文字列にSSL = false接尾辞を使うことによってそれを修正しました。
例:
connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"
MySQLと接続しながらHiveの問題を解決するためにこれを使用してください
<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>
これは私には問題ありませんでした。
this.conn = (Connection)DriverManager
.getConnection(url + dbName + "?useSSL=false", userName, password);
Config xmlのhibernateにこのプロパティを使います
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useSSL=false
</property>
- なしserverTimezone = UTC - 動かない
新しいバージョンのmysql-connectorは、デフォルトでSSL接続を確立します...それを解決するために、
mysql-connector-Java-5.0.8.Zip のような古いバージョンのmysql-connectorをダウンロードします。
。 。または。 。 Windows用OpenSSL をダウンロードして、設定方法に従ってください。
解決方法それを修正するには、MySQL接続文字列の末尾にuseSSL = falseを追加します。
例.
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