Panggilan Balik Spring Shutdown

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan mempelajari pelbagai cara untuk menggunakan panggilan balik shutdown dengan Spring .

Kelebihan utama menggunakan panggilan balik shutdown adalah memberi kita kawalan ke atas keluar aplikasi yang anggun.

2. Pendekatan Panggilan Balik Tutup

Spring menyokong panggilan balik penutupan tahap komponen dan tahap konteks Kami boleh membuat panggilan balik ini dengan menggunakan:

  • @PreDestroy
  • Antara muka sekali pakaiBean
  • Kaedah pemusnahan kacang
  • ServletContextListener Global

Mari lihat semua pendekatan ini dengan contoh.

2.1. Menggunakan @PreDestroy

Mari buat kacang yang menggunakan @PreDestroy :

@Component public class Bean1 { @PreDestroy public void destroy() { System.out.println( "Callback triggered - @PreDestroy."); } }

Semasa inisialisasi kacang, Spring akan mendaftarkan semua kaedah kacang yang diberi penjelasan dengan @PreDestroy dan memanggilnya semasa aplikasi dimatikan.

2.2. Menggunakan Antara Muka DisposableBean

Kacang kedua kami akan melaksanakan antara muka DisposableBean untuk mendaftarkan panggilan balik penutupan:

@Component public class Bean2 implements DisposableBean { @Override public void destroy() throws Exception { System.out.println( "Callback triggered - DisposableBean."); } }

2.3. Menyatakan Kaedah Menghancurkan Kacang

Untuk pendekatan ini, pertama kita akan membuat kelas dengan kaedah pemusnahan tersuai:

public class Bean3 { public void destroy() { System.out.println( "Callback triggered - bean destroy method."); } }

Kemudian, kami membuat kelas konfigurasi yang menginisialisasi kacang dan menandakan kaedah destruktifnya () sebagai panggilan balik penutupan kami:

@Configuration public class ShutdownHookConfiguration { @Bean(destroyMethod = "destroy") public Bean3 initializeBean3() { return new Bean3(); } }

Kaedah XML mendaftarkan kaedah memusnahkan adalah:

2.4. Menggunakan Global ServletContextListener

Tidak seperti tiga pendekatan lain, yang mendaftar panggil balik di peringkat kacang, yang ServletContextListener mendaftarkan panggil balik di peringkat konteks .

Untuk ini mari kita buat pendengar konteks tersuai:

public class ExampleServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent event) { System.out.println( "Callback triggered - ContextListener."); } @Override public void contextInitialized(ServletContextEvent event) { // Triggers when context initializes } }

Kita perlu mendaftarkannya ke ServletListenerRegistrationBean di kelas konfigurasi:

@Bean ServletListenerRegistrationBean servletListener() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(new ExampleServletContextListener()); return srb; }

3. Kesimpulannya

Kami telah mengetahui pelbagai cara yang disediakan oleh Spring untuk mendaftarkan panggilan balik yang ditutup, baik pada tingkat kacang dan pada tahap konteks.

Ini dapat digunakan untuk mematikan aplikasi dengan bebas dan berkesan membebaskan sumber yang digunakan.

Seperti biasa semua contoh yang disebutkan dalam artikel ini terdapat di Github.