CommunicationsException база данных

wiselder

Пользователь
Сообщения
17
Решения
1
При заходе игрока на сервер мой плагин делает 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
 
MySQL отключает соединения, которые долго не взаимодействуют с базой данных.
Есть несколько вариантов:
1) Высылать пустой запрос по кд (BukkitRunnable);
2) Перед каждым запросом проверять соединение, если его нет, то устанавливать.
 
Назад
Сверху Снизу