Проблемы с тайм-аутом соединения после периода бездействия

У нас есть API, который использует спящий режим в качестве инструмента ORM, и мы используем c3p0 в качестве обработчика пула соединений. У нас нет проблем, когда мы находимся под нагрузкой. Однако мы сталкиваемся с исключениями «невозможно получить соединение», когда API неактивен в течение дня или около того. Таким образом, если никто не использует API в выходные, мы получим ошибки подключения в понедельник утром.

Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

Мы используем mysql в качестве базы данных. В своем исследовании я узнал, что mySQL делает соединения устаревшими через 8 часов или около того. Возможно, пул соединений выдает устаревшее соединение с клиентом и, следовательно, исключения времени ожидания соединения для клиента.

В настоящее время у нас нет настроенного тестирования соединения в C3Po. Скажем, если я использую IdleTestPeriod для проверки соединения до того, как они будут переданы клиенту пулом. Что произойдет, если все мои соединения в какой-то момент не пройдут тест? Будут ли эти неудачные подключения удалены из пула, а новые активные подключения будут созданы снова?

В настоящее время это настройки c3p0, которые мы используем. Возможны ли другие причины этой проблемы?

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${----}"/>
        <property name="jdbcUrl" value="${----}"/>
        <property name="user" value="${----}"/>
        <property name="password" value="${------}"/>
        <property name="minPoolSize" value="5"/>
        <property name="acquireIncrement" value="5" />
        <property name="maxPoolSize" value="125" />
        <property name="maxStatements" value="10" />
        <property name="maxIdleTime" value="180" />
        <property name="maxIdleTimeExcessConnections" value="30" />
        <property name="checkoutTimeout" value="3000" />
        <property name="preferredTestQuery" value="SELECT 1" />
    </bean>
5
задан Cœur 28 April 2019 в 09:45
поделиться