Java + Tomcat, умирание подключения к базе данных?

голоса
13

У меня есть настройки экземпляра, но кот подключение к базе данных я настроил в context.xml продолжает умирать после периода бездействия.

Когда я проверяю журналы я получаю следующее сообщение об ошибке:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Последний пакет успешно получен с сервера was68051 секунд назад. Последний пакет успешно отправлен на сервер был 68051 секунд назад, который длиннее сервера, настроенного значения «wait_timeout». Вы должны рассмотреть либо истекающую и / или соединения тестирования валидность перед использованием в приложении, увеличение сервера, настроенные значения для клиента тайм-аута, или с помощью разъема / J свойство соединения «autoReconnect = истина», чтобы избежать этой проблемы.

Вот конфигурация в context.xml:

<Resource name=dataSourceName 
        auth=Container 
        type=javax.sql.DataSource
        maxActive=100 
        maxIdle=30 
        maxWait=10000 
        username=username 
        password=********
        removeAbandoned = true
        logAbandoned = true
        driverClassName=com.mysql.jdbc.Driver 
        url=jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8  />

Я использую autoReconnect = р, как ошибка говорит делать, но связь продолжает умирать. Я никогда не видел это произойдет раньше.

Я также проверить, что все соединения базы данных должным образом закрыты.

Задан 19/08/2008 в 11:17
источник пользователем
На других языках...                            


4 ответов

голоса
8

Tomcat Документация

ДБХП использует Jakarta-Commons пул соединения с базой данных. Это зависит от количества компонентов Jakarta-Commons:

* Jakarta-Commons DBCP
* Jakarta-Commons Collections
* Jakarta-Commons Pool

Этот атрибут может помочь вам.

removeAbandonedTimeout="60"

Я использую ту же пул соединений вещь, и я устанавливаю эти свойства, чтобы предотвратить то же самое, что просто не настроено через кот. Но если первое, что не работает, попробуйте это.

testWhileIdle=true
timeBetweenEvictionRunsMillis=300000
Ответил 19/08/2008 в 14:40
источник пользователем

голоса
5

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

Таким образом, установив timeBetweenEvictionRunsMillis = 300000 вы инструктаж пула соединений пробежать соединения и выселить и закрыть простаивающие каждые 5 минут.

Ответил 16/09/2008 в 17:12
источник пользователем

голоса
1

RemoveAbandoned вариант нежелателен из ДБХПА 1.2 (хотя все еще присутствует в 1.3 ветви). Здесь «S не-официальное объяснение.

Ответил 09/02/2009 в 14:21
источник пользователем

голоса
0

Я не знаю, делает ли выше ответ в основном то же самое, но некоторые из наших систем используют соединение DB примерно раз в неделю, и я видел, что мы обеспечиваем -Otimeout флаг или что-то в этом роде, чтобы MySQL, чтобы установить соединение тайм-аут.

Ответил 19/08/2008 в 20:06
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more