Có vẻ như kết nối đang bị ngắt bởi một số tường lửa hoặc hoạt động khác.
Để khắc phục sự cố, chúng tôi đã điều chỉnh nhóm cơ sở dữ liệu bằng cách chỉ định các thuộc tính sau
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.
Việc tạo lại sự cố sẽ yêu cầu loại bỏ kết nối ở phía cơ sở dữ liệu. Chúng tôi đã thực hiện một thử nghiệm nhỏ bằng cách sử dụng mssql, trong đó chúng tôi có thể chấm dứt kết nối bằng cách sử dụng Công cụ máy chủ và nhóm đang thiết lập lại kết nối.
<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>
Lưu ý rằng timeBetweenEvictionRunsMillis tính bằng mili giây.
Cấu hình trên sẽ kiểm tra kết nối không hợp lệ và loại bỏ chúng khỏi nhóm nếu chúng bị đóng đột ngột bởi cơ sở dữ liệu hoặc tường lửa.