私たちは、ORMツールとしてhibernateを使用するapiを持っており、c3p0を接続プールハンドラとして使用しています。我々は負荷がかかっているときに問題はありません。しかし、apiが1日ほど休止していない場合、「接続を確立できません」という例外が発生しています。したがって、週末に本体に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>
MySQL Java Connectorで高可用性およびクラスタリングのセクションで助け