Tampaknya koneksi terputus oleh beberapa firewall atau aktivitas lain. Kami menghadapi masalah serupa di mana database menghentikan koneksi yang menganggur selama 30 menit.
Untuk Mengatasi masalah tersebut, kami telah menyetel kumpulan basis data dengan menentukan properti berikut
testOnBorrow:-Setting it true will force the pooling provider to run the validation query while handing out the connection to the application.
testWhileIdle:-Setting it true will enable the validation when the connection is sitting idle in the pool.
timeBetweenEvictionRunsMillis:- Setting this property to non-zero will allow the evictor thread to run,which will test the idle connections.
Mereproduksi masalah akan membutuhkan untuk mematikan koneksi di sisi basis data. Kami telah melakukan tes kecil menggunakan mssql di mana kami dapat mengakhiri koneksi menggunakan Alat Server dan kumpulan itu membuat koneksi lagi.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${myjdbc.driverClassName}" />
<property name="url" value="${myjdbc.url}" />
<property name="username" value="${myjdbc.username}" />
<property name="password" value="${myjdbc.password}" />
<property name="testOnBorrow" value="true" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="3000" />
</bean>
Perhatikan waktuBetweenEvictionRunsMillis dalam jutaan.
Konfigurasi di atas akan memeriksa koneksi yang tidak valid dan menghapusnya dari kumpulan jika koneksi tersebut tiba-tiba ditutup oleh database atau firewall.