CommunicationsException база данных

StrangeChestnut

Пользователь
При заходе игрока на сервер мой плагин делает SELECT запрос в базе данных и выдает ошибку
Данная ошибка, как я понял, вылетает при достаточно длительном отсутствии игроков на сервере
Перед запросами я всегда проверяю подключение, и если его нет то переподключаюсь.

Код:
[08:33:59 WARN]: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 45,244,121 milliseconds ago. The last packet sent successfully to the server was 45,244,122 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.
>.... [08:33:59 WARN]: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>.... [08:33:59 WARN]: at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>.... [08:33:59 WARN]: at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>.... [08:33:59 WARN]: at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>.... [08:33:59 WARN]: at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
>.... [08:33:59 WARN]: at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
>.... [08:33:59 WARN]: at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3706)
>.... [08:33:59 WARN]: at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2506)
>.... [08:33:59 WARN]: at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
>.... [08:33:59 WARN]: at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
>.... [08:33:59 WARN]: at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1912)
>.... [08:33:59 WARN]: at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2020)
>.... [08:33:59 WARN]: at ru.strangechestnut.roleplay.managers.SQLManager.get(SQLManager.java:145)
>.... [08:33:59 WARN]: at ru.strangechestnut.roleplay.managers.RPManager.lambda$onPlayerJoin$1(RPManager.java:110)
>.... [08:33:59 WARN]: at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftTask.run(CraftTask.java:84)
>.... [08:33:59 WARN]: at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
>.... [08:33:59 WARN]: at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
>.... [08:33:59 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>.... [08:33:59 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>.... [08:33:59 WARN]: at java.lang.Thread.run(Thread.java:748)
>.... [08:33:59 WARN]: Caused by: java.net.SocketException: Broken pipe (Write failed)
>.... [08:33:59 WARN]: at java.net.SocketOutputStream.socketWrite0(Native Method)
>.... [08:33:59 WARN]: at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
>.... [08:33:59 WARN]: at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
>.... [08:33:59 WARN]: at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
>.... [08:33:59 WARN]: at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
>.... [08:33:59 WARN]: at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3688)
>.... [08:33:59 WARN]: ... 13 more
 

BuseSo

Разработчик
MySQL отключает соединения, которые долго не взаимодействуют с базой данных.
Есть несколько вариантов:
1) Высылать пустой запрос по кд (BukkitRunnable);
2) Перед каждым запросом проверять соединение, если его нет, то устанавливать.
 

BuseSo

Разработчик
Black_Baroness, этот флаг используется в том случае, когда MySQL перезагружалась, в остальных случаях не используется.
 

StrangeChestnut

Пользователь
BuseSo, Я написал в посте, что перед каждым запросом проверяю соединение. Возможно я делаю это неправильно.

Java:
private void tryConnect() throws SQLException {
           if (con.isClosed()) con = dataSource.getConnection();
}
 

BuseSo

Разработчик
Когда соединение сбрасывается, оно становится null, на сколько я помню.
 

Комнаты в чате

Верх Низ