SQLException - Не удалось получить сервер состояния перехода только для чтения - PullRequest
0 голосов
/ 03 февраля 2020

Этот вопрос, кажется, существует во всем rnet, но без какого-либо конкретного решения. Я отказался от попыток различными способами.

Может ли кто-нибудь помочь с более конкретным решением или способом go узнать больше об основной проблеме?

Несколько запросов на вставку в в некоторых таблицах возникает ошибка со следующей ошибкой:

application-2020-01-30-3.log.gz:org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: java.sql.SQLException: Could not retrieve transation read-only status server [statement:"INSERT INTO TABLE ({FIELDS}) VALUES({VALUES})", located:"INSERT INTO TABLE ({FIELDS}) VALUES({VALUES})", rewritten:"/* TableDAO.save */ INSERT INTO TABLE ({FIELDS}) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1338)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.Update.executeAndReturnGeneratedKeys(Update.java:82)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.sqlobject.UpdateHandler$1.value(UpdateHandler.java:56)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.sqlobject.UpdateHandler.invoke(UpdateHandler.java:79)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:224)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.sqlobject.SqlObject$3.intercept(SqlObject.java:133)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$dd33673f.save(<generated>)
application-2020-01-30-3.log.gz:    at com.zoomcar.services.inventory.core.impl.UtilizationManagerImpl.calculateUtilization(UtilizationManagerImpl.java:233)
application-2020-01-30-3.log.gz:    at com.zoomcar.services.inventory.scheduler.jobs.UtilizationCalculationJob.execute(UtilizationCalculationJob.java:25)
application-2020-01-30-3.log.gz:    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
application-2020-01-30-3.log.gz:    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
application-2020-01-30-3.log.gz:Caused by: java.sql.SQLException: Could not retrieve transation read-only status server
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:505)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:479)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:489)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:2610)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:2576)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.PreparedStatement.checkReadOnlySafeStatement(PreparedStatement.java:1082)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.PreparedStatement.execute(PreparedStatement.java:1102)
application-2020-01-30-3.log.gz:    at jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
application-2020-01-30-3.log.gz:    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
application-2020-01-30-3.log.gz:    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
application-2020-01-30-3.log.gz:    at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
application-2020-01-30-3.log.gz:    at com.sun.proxy.$Proxy72.execute(Unknown Source)
application-2020-01-30-3.log.gz:    at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1327)
application-2020-01-30-3.log.gz:    ... 10 common frames omitted
application-2020-01-30-3.log.gz:Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 67,698,890 milliseconds ago.  The last packet sent successfully to the server was 67,698,891 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:590)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:57)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:1983)
application-2020-01-30-3.log.gz:    at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:1936)

Структура приложения: Dropwizard

Используемый URL БД: "jdb c: mysql: // {domain -name}: {порт} / {DB_NAME}? autoReconnect = true & useSSL = false "

Класс драйвера БД: com. mysql .jdb c .Driver

Приложение использует Amazon RDS

1 Ответ

0 голосов
/ 03 февраля 2020

К «узнать больше о лежащей в основе проблеме» , посмотрите на реальное сообщение об ошибке, т.е. последнее перечисленное «Причины», а не на ошибки, полученные из него:

Причина: com.mysql.cj.jdbc.exceptions.CommunicationsException: последний пакет, успешно полученный от сервера, составил 67 698 890 миллисекунд в go. Последний пакет, успешно отправленный на сервер, составил 67 698 891 миллисекунд go. длиннее, чем сконфигурированное сервером значение wait_timeout. Вам следует рассмотреть вопрос об истечении срока действия и / или проверке допустимости соединения перед использованием в приложении, увеличении значений, настроенных сервером для тайм-аутов клиента, или использовании свойства соединения Connector / J 'autoReconnect = true', чтобы избежать этой проблемы.

Чтобы найти «более конкретное решение» , сделайте то, что было сказано в сообщении об ошибке.


Всегда смотрите на последнее перечисленное «Причина» в трассировке стека при исследовании причины ошибки. Вот почему так важно всегда перечислять полную трассировку стека здесь, в StackOverflow. Хорошая работа в этом. ?

...