Biến đó không bị lỗi đâu cậu
Tớ recommend cậu nên tự debug để tìm hiểu thêm. Đó là cách tốt nhất để cậu hiểu, và cũng là cách duy nhất, do bọn tớ không biết cách cậu dùng connection pool này như thế nào
Cơ mà cài đặt mà cậu tham khảo vô cùng tồi tệ. Tớ nghĩ cậu tốt nhất nên thử dùng HikariCP hoặc thư viện tương tự để xử lý connection pool, chứ đừng dùng code này trên production
- Concept timeout cho từng connection bị hiểu sai. Timeout thường được hiểu 1 connection sẽ giữ trạng thái kết nối cho tới khi timeout, nhưng ở implementation này, timeout là thời gian 1 connection được ở trong pool.
- Parameter thứ 4 của constructor
DBConnectionCell
nhận relaxTime
, nhưng giá trị được truyền vào là time_out
.
Điều này đồng nghĩa với việc tất cả các connection mới tạo ra đều “timeout” ngay lập tức.
- Có 1 thread chạy song song, với nhiệm vụ dọn dẹp connection pool, khi connection “timeout”. Vấn đề là thread này luôn giữ số connection lớn hơn hoặc bằng min pool size, và tiêu chí dọn dẹp là khi connection bị “timeout”.
Điều này dẫn tới một thời điểm tất cả các connection còn lại trong pool chắc chắn bị “timeout”.
- Trong method
getConnection
, connection mới chỉ được tạo ra khi pool empty và số thread tạo ra chưa lớn hơn max pool size.
Điều này dẫn tới một thời điểm, khi cậu getConnection
, không có connection mới được tạo ra, cho tới khi pool empty. Lúc đó, khi getConnection, thực tế cậu chỉ tạo connection mới => pool của cậu suy biến thành 1 hệ thống cứ tạo connection mới.