Apabila menggunakan pengumpulan sambungan dalam aplikasi web Java, adalah penting untuk mengelak daripada meletihkan kolam. Ini boleh berlaku jika sambungan tidak ditutup dengan betul, menyebabkan aplikasi ranap kerana kekurangan sambungan yang tersedia.
Memahami Isu
Dalam kod Java yang disediakan, kolam sambungan dibuat menggunakan sumber data dan diuruskan oleh kacang. Walau bagaimanapun, kod tersebut gagal menutup sambungan selepas ia digunakan, menyebabkan kumpulan cepat kehabisan sambungan yang tersedia.
Mengenal pasti dan Membetulkan Kebocoran Sambungan
Masalah timbul daripada kekurangan penutupan sambungan, pernyataan dan set hasil yang betul. Untuk menyelesaikan masalah ini, sumber JDBC hendaklah ditutup dalam blok cuba-dengan-sumber:
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(); } }
Untuk versi Java sebelum 7, blok cuba-akhir dengan penutupan sumber manual harus digunakan:
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) {} } }
Menutup Sambungan dalam Pengumpulan Sambungan
Adalah penting untuk menutup sambungan walaupun menggunakan pengumpulan sambungan. Pengumpulan sambungan tidak mengendalikan penutupan secara automatik; sebaliknya, ia menggunakan sambungan berbalut yang mungkin mengembalikan sambungan ke kolam dan bukannya menutupnya.
Kegagalan menutup sambungan akan menghalangnya daripada dikembalikan ke kolam dan mengakibatkan sambungan keletihan. Penutupan yang betul memastikan sambungan dikembalikan ke kolam untuk digunakan semula.
Sumber Tambahan
Untuk maklumat lanjut, rujuk sumber berikut:
Atas ialah kandungan terperinci Bagaimana untuk Mencegah JDBC MySQL Connection Pool Keletihan dalam Aplikasi Web Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!