Bagaimana saya bisa pemrograman penutupan sebuah musim semi Boot aplikasi tanpa mengakhiri VM ?
Dalam karya lain, kebalikan dari
new SpringApplication(Main.class).run(args);
java
spring
spring-boot
Axel Fontaine
sumber
sumber
Jawaban:
Menutup
SpringApplication
pada dasarnya berarti menutup yang mendasarinyaApplicationContext
. TheSpringApplication#run(String...)
metode memberikan Anda bahwaApplicationContext
sebagaiConfigurableApplicationContext
. Anda kemudian bisaclose()
melakukannya sendiri.Sebagai contoh,
Alternatifnya, Anda dapat menggunakan
static
SpringApplication.exit(ApplicationContext, ExitCodeGenerator...)
metode helper untuk melakukannya untuk Anda. Sebagai contoh,sumber
ExitCodeGenerator
bisa digunakan. Anda bisa kembali darimain
metode untuk keluar dengan anggun (kode keluar 0).Dalam aplikasi boot musim semi Anda dapat menggunakan sesuatu seperti ini
ShutdownManager.java
sumber
ApplicationContext
kaleng disuntikkan secara otomatis ke kacang lain.Ini bekerja, bahkan selesai dicetak.
Jadi menambahkan
.close()
setelahrun()
Penjelasan:
dan:
Jadi pada dasarnya, ini tidak akan menutup konteks induk, itulah mengapa VM tidak berhenti.
sumber
SpringApplication.exit(appContext, () -> returnCode)
.SpringApplication.run(MyApplication.class, args)
, maka tidak ada konteks induk. Hanya ada satu konteks, konteks dibuat dan dikembalikanrun
, yang kemudian Anda segeraclose
. @Michael benar. Ini tidak akan berfungsi untuk program yang perlu melakukan apa pun setelah konteks Spring diinisialisasi, yang merupakan sebagian besar program.Dalam aplikasi, Anda dapat menggunakan
SpringApplication
. Ini memilikiexit()
metode statis yang mengambil dua argumen: theApplicationContext
dan anExitCodeGenerator
:yaitu Anda dapat mendeklarasikan metode ini:
Di dalam tes Integrasi Anda dapat melakukannya dengan menambahkan
@DirtiesContext
anotasi di tingkat kelas:@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
- ApplicationContext terkait akan ditandai sebagai kotor setelah kelas pengujian.@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD)
- ApplicationContext terkait akan ditandai sebagai kotor setelah setiap metode pengujian di kelas.yaitu
sumber
Ini akan memastikan bahwa aplikasi SpringBoot ditutup dengan benar dan sumber daya dilepaskan kembali ke sistem operasi,
sumber