Настройка: Glassfish 3x, Java EE, EclipseLink.
Конфигурация пула соединений jdbc (из domain.xml):
<jdbc-connection-pool validation-table-name="dummy" pool-resize-quantity="5" max-pool-size="300" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" wrap-jdbc-objects="false" res-type="javax.sql.XADataSource" steady-pool-size="25" name="mysql_bazaarify_rootPool" is-connection-validation-required="true" non-transactional-connections="true" validate-atmost-once-period-in-seconds="60">
<property name="URL" value="jdbc:mysql://demodb.mydb.com:3306/database?zeroDateTimeBehavior=convertToNull&useUnicode=yes"></property>
Редко получая сообщение CommunicationsException для разных запросов.Я настроил соединения для проверки перед использованием с 60 секундами действия.время ожидания на сервере sql составляет 8 часов.
Тем не менее я вижу ниже ошибку в моих журналах (~ 50 раз в день) Исключение трассировки:
Internal Exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
Error Code: 0
....
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
The last packet successfully received from the server was 56,688,227 milliseconds ago.
The last packet sent successfully to the server was 56,688,227 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.
....
Caused by: java.net.SocketException: Connection timed out
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3832)
... 140 more
Мой вопрос, когда я установилдля проверки соединения (каждые 60 секунд), возможно ли, что я получаю устаревшее / разорванное соединение из пула соединений, в котором говорится, что последнее соединение с mysql было (> 60 секунд) назад?
Не должен лисоединение будет проверено до тех пор, пока здоровое соединение не будет возвращено из пула?Являются ли эти исключения нормальными с настройками, которые я настроил?
PS Я заметил, что при всех таких сбоях сообщаемое значение в миллисекундах назад всегда> 8 часов.Помогает ли это что-нибудь вывести?