решено Последняя версия драйвера JDBC MySQL, очевидно, пытается создать SSL-соединение.Приложение, которое РАБОТАЛО, НЕ определяло значения javax.net.ssl.keystore (и других), поэтому (я полагаю) оно возвращается к соединению без SSL.Приложение, которое СБОЙ определило все параметры хранилища ключей / сертификата, а затем попытка подключения потерпела неудачу - все еще не уверен точно, почему, если кто-то может просветить, был бы признателен.Выданное исключение также может быть более информативным.
В любом случае добавление «& useSSL = false & allowPublicKeyRetrieval = true» к параметрам соединения работает для обоих приложений.(Хотя это не очень хорошая настройка для любого производственного приложения, его можно использовать для этого POC!)
============= Исходная публикация следует =========
Это поставило меня в тупик на несколько дней!Сервер AWS (86_64), Fedora 29, Java 8 (1.8.0_201-b09), MySQL - все они обновлены до последней версии.MySQL работает на том же сервере.Драйвер: com.mysql.cj.jdbc.Driver
Параметры подключения: jdbc: mysql: //172.31.10.222: 3306? User = xxxx & password = xxxx.(IP является частным IP-адресом AWS для этого сервера.)
Имеют 2 разные утилиты - отдельные «основные» подпрограммы, но все в одном и том же файле JAR.Первый работает отлично, второй прерывается со стеком, вставленным ниже.Это согласуется с десятками испытаний с небольшими вариациями.
В обеих основных подпрограммах используется метод connectToDB, показанный в трассировке стека.Инструментировал это для регистрации всех параметров и имени класса драйвера в обоих случаях и подтвердил, что они идентичны.
Уже пробовал / проверял:
- Несколько запросов Google одного и того жеошибка
- MySql работает и работает (подключиться через другое окно терминала без проблем),
- Тот же JAR-файл, используемый со всем локальным кодом
- Путь к классу идентичен
- Работает под тем же пользователем Linux, используя того же пользователя / пароль MySQL
- Проверьте указанный выше IP-адрес (172.31.10.222)
- Также изменил IP-адрес на «localhost», 127.0.0.1, исимволическое имя из / etc / hosts
- Добавлен -Xmx2G, чтобы убедиться, что проблема OOM не возникает
Это 2 разных метода 'main', но они не делают больше, чемзагрузить некоторые свойства (из тех же файлов свойств), прежде чем пытаться подключиться к БД.Затем они выполняют ту же процедуру connectToDB.
Что-то в контексте должно быть другим!Надеясь, что кто-то здесь может, по крайней мере, дать несколько советов о том, где искать!
Спасибо
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
at spc.tools.spcConnection.connectToDB(spcConnection.java:692)
at spc.tools.spcConnection.connectToLocalDB(spcConnection.java:1418)
at spc.tools.spcConnection.loadAllConnectionsOK(spcConnection.java:1112)
at spc.tools.spcConnection.initOneTime(spcConnection.java:1012)
at spc.tools.spcConnection.init(spcConnection.java:194)
at spc.ops.spcServerBase.environmentOK(spcServerBase.java:367)
at spc.ops.spcServerBase.environmentOK(spcServerBase.java:342)
at spc.run.daemon.spcDaemon.main(spcDaemon.java:1082)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:351)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:777)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:486)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)
at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1442)
at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
... 11 more
Caused by: java.net.SocketException: Broken pipe (Write failed)
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:879)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:720)
at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:1144)
at sun.security.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:1280)
at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1190)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:369)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:315)
===================================================== Новая информация =====
Вотключевые строки из метода connectToDB (отвечая на комментарий ниже):
Driver dvr = (Driver)Class.forName(info.sDBDriver).newInstance();
if(dvr!=null) conn = dvr.connect(accessString(), null);
проверил ожидаемый драйвер и что accessString () возвращает строку 'jdbc: mysql: ...', как указано выше.Возникает исключение при выполнении 2-й строки выше.
Начиная с исходного поста, введите код для запуска 'netstat -ln' непосредственно перед этими строками и опубликуйте результат в журнале.Это показывает активный слушатель для порта 3306.