У меня небольшая проблема с MySQL-Connection-Pooling.
Это тот случай:
Различные работы запланированы через Кварц. Все задания подключаются к разным базам данных, которые прекрасно работают весь день, в то время как запланированные на ночь задания не выполняются с CommunicationsException ...
Кварцевый Работа:
Job1 runs 0 0 6,10,14,18 * * ?
Job2 runs 0 30 10,18 * * ?
Job3 runs 0 0 5 * * ?
Как видно, последнее задание выполняется в 18 часов и занимает около 1 часа.
Первая работа в 5 утра - это та, которая провалилась. Я уже попробовал все виды комбинаций параметров в моей конфигурации ресурса, это то, что я сейчас запускаю:
<!-- Database 1 (MySQL) -->
<Resource
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100"
maxIdle="30"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
type="javax.sql.DataSource"
name="jdbc/appDbProd"
username="****"
password="****"
url="jdbc:mysql://127.0.0.1:3306/appDbProd?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="true"
validationQuery="SELECT 1"
timeBetweenEvictionRunsMillis="1800000"
/>
<!-- Database 2 (MySQL) -->
<Resource
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100"
maxIdle="30"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
type="javax.sql.DataSource"
name="jdbc/prodDbCopy"
username="****"
password="****"
url="jdbc:mysql://127.0.0.1:3306/prodDbCopy?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="true"
validationQuery="SELECT 1"
timeBetweenEvictionRunsMillis="1800000"
/>
<!-- Database 3 (MSSQL)-->
<Resource
auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
maxActive="30"
maxIdle="30"
maxWait="100"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
name="jdbc/catalogDb"
username="****"
password="****"
type="javax.sql.DataSource"
url="jdbc:jtds:sqlserver://127.0.0.1:1433;databaseName=catalog;useNdTLMv2=false"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="true"
validationQuery="SELECT 1"
timeBetweenEvictionRunsMillis="1800000"
/>
По понятным причинам я изменил IP-адреса, имена пользователей и пароли, но их можно считать правильными, поскольку приложение работает успешно весь день.
Самое раздражающее:
Первое задание, которое запускает первые, успешно запрашивает Database2, но по какой-то причине не выполняет запрос к Database1 (CommunicationsException):
вызвано:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Последний пакет успешно получен
с сервера было 39,376,539
миллисекунды назад Последний пакет
успешно отправлен на сервер был
39 376 539 миллисекунд назад. длиннее
чем сервер настроил значение
'Wait_timeout. Вы должны рассмотреть
либо истекает и / или тестирование
срок действия соединения перед использованием в вашем
приложение, увеличивающее сервер
настроенные значения для времени ожидания клиента,
или используя соединение Connector / J
свойство 'autoReconnect = true', чтобы избежать
эта проблема.
Есть идеи? Спасибо!