Đây không phải là cách đúng đắn. Nguồn dữ liệu cần được quản lý bởi bất kỳ vùng chứa nào bạn đang chạy ứng dụng. MysqlConnectionPoolDataSource
không một nhóm kết nối. Đây chỉ là một triển khai cụ thể của javax.sql.DataSource
giao diện. Bạn thường xác định nó trong ngữ cảnh JNDI và lấy nó từ đó. Ngoài ra, bản thân MySQL cũng tuyên bố rõ ràng tất cả trong tài liệu của họ
.
Bây giờ, làm thế nào để sử dụng nó phụ thuộc vào mục đích của ứng dụng. Nếu đó là một ứng dụng web, thì bạn cần tham khảo tài liệu tài nguyên JNDI của servletcontainer / appserver được đề cập. Nếu đó là Tomcat, thì bạn có thể tìm thấy nó tại đây . Nếu bạn đang chạy một ứng dụng khách - mà tôi rất thắc mắc về giá trị của một nhóm kết nối--, thì bạn cần tìm kiếm một khung tổng hợp kết nối có thể sử dụng nguồn dữ liệu gộp kết nối do MySQL cung cấp, chẳng hạn như C3P0 .
Vấn đề khác với mã mà bạn đã đăng là PooledConnection#getConnection()
sẽ trả về cơ bản do đó không một kết nối tổng hợp. Gọi close trên nó sẽ không trả lại kết nối với pool mà chỉ cần thực sự đóng nó lại. Pool luôn phải tạo ra một kết nối mới.
Sau đó, câu chuyện an toàn chủ đề, điều đó phụ thuộc vào thực tế khuôn khổ tổng hợp kết nối được đề cập. C3P0 đã chứng minh được tính mạnh mẽ của nó trong nhiều năm, bạn không cần lo lắng về điều đó miễn là bạn viết mã JDBC theo thành ngữ tiêu chuẩn, tức là sử dụng only giao diện JDBC và thu được và đóng tất cả các tài nguyên (Connection
, Statement
và ResultSet
) trong phạm vi ngắn nhất có thể.