Những điều bạn có thể thử:
-
setMaxWait(-1)
trên BasicDataSource. Điều đó cho biết nó phải đợi kết nối vô thời hạn. -
Kiểm tra xem
wait_timeout
trên máy chủ MySQL của bạn được đặt thành 8h mặc định. -
Đặt
?autoReconnect=true
trên URL JDBC của bạn -
setTestOnBorrow(true)
trên BasicDataSource. Điều này sẽ ngăn nó phân phối các kết nối cũ nhưng sẽ thêm chi phí cho ứng dụng của bạn (mặc dù nếu bạn đã có các truy vấn đơn dài như vậy, bạn có thể sẽ không nhận thấy phần đó).
Nói chung, tôi thấy việc tiếp tục sử dụng lại kết nối là một ý tưởng tồi. Đối với tôi, quan điểm của việc có một hồ bơi là tôi không cần phải làm điều đó.
Các truy vấn của bạn có phải là giao dịch không? Một số truy vấn thực sự dài có đang khóa một bảng chính không?