Tạo connection pool

Chào ạ,
Em làm connection pool theo cách làm của bài viết này https://codelearn.io/sharing/connection-pool-ket-noi-database. Nhưng web chạy được tầm 15 phút là các connection trong pool đều bị null, web disconnect với database.
Trong bài viết tác giả dùng một biến static để làm bộ nhớ lưu pool . Em nghĩ là do cái biến này bị lỗi

protected static BaseConnectionPool instancePool;
private LinkedBlockingQueue<DBConnectionCell> pool = new LinkedBlockingQueue<DBConnectionCell>();

Làm sao để fix ạ, em cảm ơn

Biến đó không bị lỗi đâu cậu :smile:

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 :smile:

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 :nauseated_face:

  • 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 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.
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?