Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Praktik penyatuan koneksi JDBC MySql untuk menghindari kumpulan koneksi yang habis

Pengecualian menunjukkan kasus khas kode aplikasi yang membocorkan koneksi database. Anda perlu memastikan bahwa Anda memperoleh dan tutup semuanya (Connection , Statement dan ResultSet ) dalam try-with-resources blok di blok metode yang sama sesuai dengan idiom JDBC normal.

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();
    }
}

Atau saat Anda tidak menggunakan Java 7, dalam try-finally memblokir. Menutupnya di finally akan menjamin bahwa mereka juga ditutup jika ada pengecualian.

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) {}
    }
}

Ya, Anda tetap harus menutup koneksi sendiri, bahkan saat menggunakan connection pooling. Ini adalah kesalahan umum di antara para pemula bahwa mereka berpikir bahwa itu akan secara otomatis menangani penutupan. Ini tidak benar . Kumpulan koneksi yaitu mengembalikan koneksi yang dibungkus yang melakukan sesuatu seperti berikut di 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();
    }
}

Tidak menutupnya akan menyebabkan koneksi tidak dilepaskan kembali ke kumpulan untuk digunakan kembali dan dengan demikian akan memperoleh yang baru lagi dan lagi sampai DB kehabisan koneksi yang akan menyebabkan aplikasi Anda mogok.

Lihat juga:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfigurasi Replikasi Database Master-Master MySQL

  2. Mengeluarkan semua kesalahan PHP ke database bukan error_log

  3. Cara Meningkatkan Kinerja MySQL AWS 2X Lebih Dari Amazon RDS dengan Biaya Yang Sama

  4. Alternatif MySQL Workbench - Manajemen Pengguna Database ClusterControl

  5. Tidak dapat terhubung ke server MySQL kesalahan 111