cari
RumahJavajavaTutorialBagaimana 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.

    Bagaimana untuk melaksanakan pemantauan acara permulaan perkhidmatan aplikasi springboot

    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<.>

    Bagaimana untuk melaksanakan pemantauan acara permulaan perkhidmatan aplikasi springboot

    Hasil keluaran ujian:

    c.z.boot.launch.config.AppStartupRunner : Nama parameter ApplicationRunner: [nama, umur]

    c.z.boot .launch.config. AppStartupRunner : Nilai parameter ApplicationRunner: [18]
    c.z.boot.launch.config.AppStartupRunner : Parameter ApplicationRunner: [--name=zimug, --age=18]

    BeanApplicationRunner run3 ()[-- name=zimug, --age=18]

    c.z.b.l.config.CommandLineStartupRunner : Parameter masuk CommandLineRunner: [--name=zimug, --age=18]

    BeanCommandLineRunner run1() [--name =zimug, --age=18]
    e=18]
    BeanCommandLineRunner run2()[--name=zimug, --age=18]

    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 norma

    • 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

    4. Ringkasan

    Penggunaan teras CommandLineRunner dan ApplicationRunner adalah konsisten, yang mana adalah untuk melaksanakan kod khas sebelum aplikasi bermula. Perintah pelaksanaan ApplicationRunner mendahului CommandLineRunner; ApplicationRunner merangkum parameter ke dalam objek dan menyediakan kaedah untuk mendapatkan nama parameter, nilai parameter, dll., yang menjadikan operasi lebih mudah.

    5. Ringkasan masalah

    Ini adalah masalah sebenar yang penulis hadapi dalam amalan, iaitu, saya mentakrifkan berbilang pelaksanaan CommandLineRunner. Masalah pelik timbul:

    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!

    Kenyataan
    Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
    Akan R.E.P.O. Ada Crossplay?
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    MinGW - GNU Minimalis untuk Windows

    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

    Dreamweaver CS6

    Alat pembangunan web visual

    Versi Mac WebStorm

    Versi Mac WebStorm

    Alat pembangunan JavaScript yang berguna

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma