Tôi đã gặp sự cố như thế này trước đây khi cơ sở dữ liệu nằm trên một hộp riêng biệt và có một bức tường lửa ở giữa được đặt thành các kết nối không hoạt động hết thời gian chờ.
Trong một số trường hợp, tường lửa cắt kết nối theo cách mà đầu cuối JDBC không phát hiện được và việc cố gắng sử dụng nó dẫn đến một khối vô thời hạn.
Trong trường hợp của tôi, đó là một nhóm kết nối tùy chỉnh đã gửi một truy vấn kiểm tra xuống kết nối trước khi trả lại nó từ nhóm. Tôi đã định cấu hình truy vấn thử nghiệm này để có thời gian chờ (sử dụng Statement.setQueryTimeout) để nó không chặn vô thời hạn.