Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các phương pháp gộp kết nối MySql của JDBC để tránh nhóm kết nối cạn kiệt

Ngoại lệ chỉ ra một trường hợp điển hình của mã ứng dụng làm rò rỉ các kết nối cơ sở dữ liệu. Bạn cần đảm bảo rằng bạn có được đóng tất cả chúng (Connection , Statement ResultSet ) trong try-with-resources trong cùng một khối phương thức theo thành ngữ JDBC thông thường.

public void create(Entity entity) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_CREATE);
    ) { 
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    }
}

Hoặc khi bạn không sử dụng Java 7, trong try-finally khối. Đóng chúng trong finally sẽ đảm bảo rằng chúng cũng được đóng trong trường hợp ngoại lệ.

public void create(Entity entity) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;

    try { 
        connection = dataSource.getConnection();
        statement = connection.prepareStatement(SQL_CREATE);
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    } finally {
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }
}

Có, bạn vẫn cần tự đóng các kết nối, ngay cả khi sử dụng gộp kết nối. Đó là một sai lầm phổ biến ở những người mới bắt đầu rằng họ nghĩ rằng nó sẽ tự động xử lý khi kết thúc. Điều này không đúng . Nhóm kết nối cụ thể là trả về một kết nối được bọc thực hiện giống như sau trong hàm close ():

public void close() throws SQLException {
    if (this.connection is still eligible for reuse) {
        do not close this.connection, but just return it to pool for reuse;
    } else {
        actually invoke this.connection.close();
    }
}

Không đóng chúng sẽ khiến kết nối không được giải phóng trở lại nhóm để sử dụng lại và do đó nó sẽ lấy lại một kết nối mới nhiều lần cho đến khi DB hết kết nối, điều này sẽ khiến ứng dụng của bạn gặp sự cố.

Xem thêm:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại mật khẩu ROOT trong MySQL 5.6

  2. Chế độ xem MySQL

  3. Sử dụng PDO trong các lớp học

  4. Làm thế nào để xây dựng lại một MySQL Slave không nhất quán?

  5. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Debian 5 (Lenny)