Я пытаюсь подключиться к базе данных MySQL:
static final String URL="jdbc:mysql://localhost:3306/demo_hotels?useSSL=true&autoReconnect=true&serverTimezone=UTC";
static final String USERNAME="demo";
static final String PASSWORD="demo";
public static void main(String[] args) {
try {
DriverManager.registerDriver(new FabricMySQLDriver());
connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new
JdbcConnection(connection));
Liquibase liquibase = new liquibase.Liquibase("db/db.changelog.xml",
new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
database.close();
} catch (SQLException | LiquibaseException e) {
e.printStackTrace();
}
Это сработало.Но сейчас я пытаюсь выполнить этот код на другой машине, и он не работает:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
at com.pazukdev.auxiliary_services.DBService.main(DBService.java:69)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)
Почему он перестал работать?
Старая машина: версия Java 1.8.0_112, Windows 7, MySQL Server 5.7.21
Новая машина: Java версии 1.8.0_172, Windows 10, MySQL Server 8.0.11
Я нашел некоторую информацию о подобных исключениях.Похоже, у меня есть несколько триоблей с SSL-сертификатом: Принять самозаверяющий ssl-сертификат сервера в клиенте Java
Но вариант 2 с TrustManager не работает - у меня такое же исключение.Я попытался набрать cmd:
<JAVA_HOME>\bin\keytool -import -v -trustcacerts
-alias server-alias -file server.cer
-keystore cacerts.jks -keypass changeit
-storepass changeit
Но у меня нет эффекта eny в этом варианте 1.
Возможно, я что-то не так делаю ..