2012-02-17 37 views
10

Tôi vừa bắt đầu sử dụng BoneCP và lấy mã JDBC mẫu từ trang tác giả.Sử dụng chính xác BoneCP

Tôi có một chức năng gọi là getConnection() trả về một kết nối ở đây là một đoạn trích:

// setup the connection pool 
BoneCPConfig config = new BoneCPConfig(); 
// Config goes here. 
connectionPool = new BoneCP(config); // setup the connection pool 

return connectionPool.getConnection(); // fetch a connection 

Bây giờ, câu hỏi của tôi: 1) Tôi gọi connection.close() khi tôi đã hoàn thành bằng cách sử dụng kết nối được trả về từ chức năng trên, do đó nó được trả về hồ bơi HOẶC việc này có đóng hoàn toàn kết nối không? Làm cách nào để tôi trả lại kết nối với nhóm?

2) Cách dọn dẹp hồ bơi khi đăng ký thoát? Tôi có gọi kết nốiPool.shutdown() khi tôi kết thúc không? Và ngoài ra, tôi đọc ở đâu đó mà tôi cần phải đóng tất cả các kết nối được gộp lại riêng lẻ? Điều này có đúng không?

Cảm ơn.

Trả lời

17

1. Luôn gọi connection.close() để trả lại kết nối với hồ bơi (nó sẽ không bị đóng thực tế) khi bạn đã hoàn tất.

2. Gọi connectionPool.shutDown() khi bạn hoàn thành xong hồ bơi và không lập kế hoạch kết nối lại.

1
Connection connection = dbPool.getConnection(); 

Đối tượng kết nối nhận được từ hồ bơi, là lớp bao bọc. Nó sẽ duy trì kết nối cơ bản đúng ngay cả trong Ngoại lệ.

Ngay cả trong trường hợp ngoại lệ có liên quan đến Kết nối, ví dụ: TERMINATE_ALL_CONNECTIONS, nhóm BoneCP sẽ đóng đúng tất cả các kết nối cơ bản.

Tóm lại, nhóm BoneCP làm cho bộ nhớ cache trong suốt. phía khách hàng chỉ cần làm theo các dòng chảy đứng,

  1. yêu cầu kết nối (mất kết nối từ hồ bơi, hồ bơi sẽ quyết định có nên tái sử dụng/tạo một)
  2. yêu cầu PreparedStatement/CallableStatement (tái sử dụng các đối tượng từ hồ bơi nếu nó được kích hoạt)
  3. thực hiện những điều khoản
  4. tuyên bố đóng cửa, (thả đối tượng tuyên bố đến hồ bơi nếu nó được kích hoạt)
  5. kết nối chặt chẽ, (thả đối tượng kết nối đến hồ bơi)

Khi ứng dụng dừng, tắt máy tính, hồ bơi để giải phóng tất cả các kết nối lưu trữ.

boneCP.shutdown() 
+0

Tôi tự hỏi, nếu máy chủ của tôi gặp sự cố và tôi phải khởi động lại, làm cách nào để xóa các kết nối không được phát hành kể từ khi tắt máy không bao giờ được gọi? – PixMach

+0

BoneCP sẽ giao cho họ đúng cách. Để làm cho nó rõ ràng, BoneCP là giống như một đại lý để quản lý các kết nối cho bạn. bạn "cho vay" kết nối từ nó, chỉ cần nhớ để "trở lại" trở lại. Tất cả các công việc quản lý vòng đời kết nối khác, những thứ tẻ nhạt sẽ được BoneCP chăm sóc. –

+0

Điều này thật tuyệt, nhưng vẫn cảm thấy lạ khi đóng đối tượng Connection, trông giống như một đối tượng Connection thực tế trong nháy mắt với mã BoneCP. Bất kỳ cách nào tôi có thể thấy điều này? Kết nối công cộng getConnection() ném SQLException {// được biên dịch mã} – mikato

Các vấn đề liên quan