


Bagaimana untuk melaksanakan pemantauan acara permulaan perkhidmatan aplikasi springboot
1. Pengenalan
Spring Boot menyediakan dua antara muka: CommandLineRunner dan ApplicationRunner, yang digunakan untuk melakukan pemprosesan khas apabila memulakan aplikasi digunakan dalam SpringApplication Kaedah run() dilaksanakan sebelum larian selesai. Berbanding dengan pendengar tersuai antara muka ApplicationListener Spring dan pendengar ServletContextListener yang diperkenalkan kepada anda dalam bab sebelumnya. Kelebihan menggunakan kedua-duanya ialah anda boleh menggunakan parameter permulaan aplikasi dengan mudah dan melakukan operasi pemula yang berbeza berdasarkan parameter yang berbeza.
2. Pengenalan kepada senario biasa
Laksanakan antara muka CommandLineRunner dan ApplicationRunner. Biasanya digunakan untuk pelaksanaan kod khas sebelum aplikasi bermula, seperti:
Muatkan data yang biasa digunakan sistem ke dalam memori
Kali terakhir aplikasi menjalankan Pembersihan data sampah
Penghantaran pemberitahuan selepas kejayaan sistem dimulakan, dsb.
Saya melaksanakan antara muka CommandLineRunner dan memuatkan sistem apabila aplikasi dimulakan. Data konfigurasi yang biasa digunakan ditunjukkan dalam rajah di bawah. Muatkan daripada pangkalan data ke dalam memori Apabila menggunakan data pada masa hadapan, anda hanya perlu memanggil kaedah getSysConfigList. Tidak perlu memuatkan data dalam pangkalan data setiap kali. Menjimatkan sumber sistem dan mengurangkan masa memuatkan data.
2. Percubaan kod kecil dilaksanakan melalui definisi @Component
CommandLineRunner: Parameter ialah tatasusunan rentetan
@Slf4j @Component public class CommandLineStartupRunner implements CommandLineRunner { @Override public void run(String... args){ log.info("CommandLineRunner传入参数:{}", Arrays.toString(args)); } }
ApplicationRunner: The parameter ialah Letakkannya dalam ApplicationArguments dan dapatkan parameter melalui getOptionNames(), getOptionValues(), getSourceArgs()
@Slf4j @Component public class AppStartupRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { log.info("ApplicationRunner参数名称: {}", args.getOptionNames()); log.info("ApplicationRunner参数值: {}", args.getOptionValues("age")); log.info("ApplicationRunner参数: {}", Arrays.toString(args.getSourceArgs())); } }
Achieve it melalui definisi @Bean
Kaedah ini boleh menentukan perintah pelaksanaan, bayar perhatian kepada dua Bean pertama ialah CommandLineRunner, dan Bean terakhir ialah ApplicationRunner.
@Configuration public class BeanRunner { @Bean @Order(1) public CommandLineRunner runner1(){ return new CommandLineRunner() { @Override public void run(String... args){ System.out.println("BeanCommandLineRunner run1()" + Arrays.toString(args)); } }; } @Bean @Order(2) public CommandLineRunner runner2(){ return new CommandLineRunner() { @Override public void run(String... args){ System.out.println("BeanCommandLineRunner run2()" + Arrays.toString(args)); } }; } @Bean @Order(3) public ApplicationRunner runner3(){ return new ApplicationRunner() { @Override public void run(ApplicationArguments args){ System.out.println("BeanApplicationRunner run3()" + Arrays.toString(args.getSourceArgs())); } }; } }
Anda boleh menetapkan perintah pelaksanaan melalui @Order
3 Jalankan ujian
Tambahkan parameter berikut pada konfigurasi permulaan Springboot IDEA, simpan dan mulakan aplikasi<.>
c.z.boot.launch.config.AppStartupRunner : Nama parameter ApplicationRunner: [nama, umur]The penulis telah mengujinya berkali-kali Didapati bahawa dalam keputusan ujian, susunan keutamaan ini sentiasa seperti ini, tetapi pada masa ini tidak jelas sama ada ini adalah normac.z.boot .launch.config. AppStartupRunner : Nilai parameter ApplicationRunner: [18]
BeanApplicationRunner run3 ()[-- name=zimug, --age=18]c.z.b.l.config.CommandLineStartupRunner : Parameter masuk CommandLineRunner: [--name=zimug, --age=18]
c.z.boot.launch.config.AppStartupRunner : Parameter ApplicationRunner: [--name=zimug, --age=18]BeanCommandLineRunner run1() [--name =zimug, --age=18]
e=18]
BeanCommandLineRunner run2()[--name=zimug, --age=18]
- Keutamaan pelaksanaan ApplicationRunner adalah lebih tinggi daripada CommandLineRunner
- Keutamaan Runner yang dijalankan dalam bentuk Bean adalah lebih rendah daripada anotasi Komponen plus melaksanakan antara muka Runner
- Anotasi pesanan hanya boleh menjamin perintah pelaksanaan CommandLineRunner atau ApplicationRunner yang serupa, bukan pesanan terjamin merentas kelas
Apabila anda mentakrifkan berbilang pelaksanaan CommandLineRunner, satu atau beberapa daripadanya tidak akan dilaksanakan.
Analisis: Kod berikut ialah kod yang SpringBootApplication akan laksanakan selepas memulakan projek Anda boleh melihat bahawa CommandLineRunner atau ApplicationRunner dimulakan melalui traversal dalam kod. Dalam erti kata lain, CommandLineRunner seterusnya akan dilaksanakan hanya selepas pelaksanaan CommandLineRunner sebelumnya selesai, yang dilaksanakan secara serentak.private void callRunners(ApplicationContext context, ApplicationArguments args) { List<Object> runners = new ArrayList<>(); runners.addAll(context.getBeansOfType(ApplicationRunner.class).values()); runners.addAll(context.getBeansOfType(CommandLineRunner.class).values()); AnnotationAwareOrderComparator.sort(runners); for (Object runner : new LinkedHashSet<>(runners)) { if (runner instanceof ApplicationRunner) { callRunner((ApplicationRunner) runner, args); } if (runner instanceof CommandLineRunner) { callRunner((CommandLineRunner) runner, args); } } }Jadi, jika API penyekat segerak atau gelung while(true) dipanggil dalam badan kaedah run bagi pelaksanaan CommandLineRunner, pelaksanaan lain selepas CommandLineRunner dalam traversal tidak akan dilaksanakan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemantauan acara permulaan perkhidmatan aplikasi springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6
Alat pembangunan web visual

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma