Chúng tôi đang nhìn thấy tình huống mà kết nối cơ sở dữ liệu của chúng tôi từ org.apache.commons.dbcp.BasicDataSource
đang hấp hối với ổ cắm lỗi viết:lợi nhuận DBCP đóng kết nối
com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
Tất cả các nỗ lực tiếp theo để viết thư cho các kết nối thất bại, tất nhiên:
com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
Sau khi cập nhật mã để bắt ngoại lệ như vậy và yêu cầu kết nối mới khi nó xảy ra, nó không thành công một lần nữa. Tôi có đúng là nghi ngờ rằng việc gọi số DataSource#getConnection()
không thực sự đưa ra một kết nối mới mỗi khi nó được gọi? Không phải là nó chỉ tái sử dụng kết nối hiện có, được đóng lại?
Nếu tôi chính xác, cách đúng để vứt bỏ kết nối cũ và yêu cầu kết nối mới là gì?
EDIT: Dưới đây là một phiên bản succint nhiều hơn những gì tôi muốn biết:
Connection c1, c2;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c2 = DatabaseManager.getConnection();
Is "c1 c2 ==" một tuyên bố đúng không? Hoặc có hai kết nối được phân bổ? Và nếu đó là sau này, sẽ mã như thế này đại diện cho một "rò rỉ hồ bơi kết nối":
Connection c1;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c1 = DatabaseManager.getConnection();
Tôi cho rằng kết nối đã bị đóng do lỗi ghi ổ cắm được đề cập trước đây? Một khi nó được đóng lại, mặc dù, không gọi getConnection() có được một kết nối mới? –
Không, đóng một kết nối gộp lại sẽ chỉ trả về kết nối với hồ bơi (đó là lý do tại sao bạn nên luôn đóng các kết nối trong 'final', hồ bơi khác có thể hết kết nối). Còn lại của việc xử lý các kết nối bị hỏng là lên đến hồ bơi mà bạn nên kiểm soát bằng cấu hình. Tuy nhiên, bạn nên nhận ra rằng DBCP là một hồ bơi được triển khai kém. Xem thêm http://stackoverflow.com/questions/520585/connection-pooling-options-with-jdbc-dbcp-vs-c3p0/3481821#3481821 – BalusC
Nhưng nếu close() không bao giờ được gọi? Điều gì nếu mã chỉ giữ gọi getConnection()? hiện nó vẫn tái sử dụng kết nối cũ, đóng, hay nó có được một kết nối mới từ hồ bơi? –