Kata pengantar
Dalam pekerjaan kami yang sebenarnya, kami selalu menemukan persyaratan seperti itu. Ketika proyek dimulai, kita perlu melakukan beberapa operasi inisialisasi, seperti menginisialisasi kumpulan utas, memuat sertifikat enkripsi terlebih dahulu, dll. Hari ini saya akan memperkenalkan kepada Anda alat boot pegas, yang secara khusus dirancang untuk membantu Anda menyelesaikan operasi sumber daya inisialisasi startup proyek.
Artefak ini adalah CommandLinerner. Komponen antarmuka Commandlinunner akan dieksekusi sebelum springapplication.run () setelah semua Springbeans diinisialisasi, yang sangat cocok untuk beberapa pekerjaan inisialisasi data pada awal startup aplikasi.
Selanjutnya, kami akan menggunakan casing untuk menguji cara digunakan. Sebelum pengujian, tambahkan dua baris prompt cetak ke kelas startup untuk memfasilitasi kami untuk mengidentifikasi waktu eksekusi Commandlinerner.
@SpringbootApplicationPublic commandlinernernerApplication {public static void main (string [] args) {System.out.println ("Layanan untuk memulai."); Springapplication.run (commandlinernernerApplication.class, args); System.out.println ("Layanan telah dimulai."); }}Selanjutnya, kami secara langsung membuat kelas yang mewarisi Commandlinerner dan mengimplementasikan metode run ().
@ComponentPublic Class Runner mengimplementasikan Commandlinerner {@Override public void run (String ... args) melempar Exception {System.out.println ("Pelari mulai menginisialisasi ..."); }}Kami mencetak beberapa parameter dalam metode run () untuk melihat bagaimana menjalankannya. Setelah selesai, mulailah proyek untuk pengujian:
... Layanan untuk memulai .____ __ _ /// / ___'_ __ _ (_) _ ____ _ / / / / / () / ___ | '_ |' _ | / / / / / | | | / / / / / / / / / / / / / | .__ || | _ | | _ | | _ | | _/__, | / / / / / ====================================== ____ / = / _ / _ / :: Spring Boot :: (v2.0.0.release) .. 2018-04-21 22: 21: 34.706 Info 27016--------oMCEM.PEAT.PEAT. Tomcat dimulai di Port (S): 8080 (http) dengan Path Context '' 2018-04-21 22: 21: 34.710 Info 27016 --- [Main] com.neo.CommandlinerNernerApplication: Mulai CommandlinernerApplication dalam 3,796 detik (JVM berjalan untuk 5.128) The Runner Startes di Runner di 3,796 Detik (JVM Berlari untuk 5.128) The Runner Start di Start Runner di 3,796 detik (JVM berjalan untuk 5.128) The Runner Startes di Runner Initial.
Berdasarkan informasi pencetakan konsol, kita dapat melihat bahwa metode di Commandlinerner akan dieksekusi setelah wadah boot pegas dimuat, dan proyek akan dimulai setelah eksekusi selesai.
Jika kita perlu menginisialisasi banyak sumber daya saat memulai wadah dan sumber daya awal diperintahkan satu sama lain, bagaimana kita dapat memastikan urutan eksekusi dari CommandLinerunners yang berbeda? Spring Boot juga menyediakan solusi. Itu menggunakan anotasi @order.
Kami membuat dua kelas implementasi CommandLinerner untuk menguji:
Kelas Implementasi Pertama:
@Component @order (1) Public Class orderRunner1 mengimplementasikan CommandLinUnner {@Override public void run (String ... args) melempar Exception {System.out.println ("The orderRunner1 mulai menginisialisasi ..."); }}Kelas Implementasi Kedua:
@Component @order (2) Public Class OrderRunner2 mengimplementasikan CommandlinUnner {@Override public void run (String ... args) melempar Exception {System.out.println ("The OrderRunner2 mulai menginisialisasi ..."); }}Setelah penambahan selesai, restart dan amati perintah eksekusi:
... Layanan untuk memulai. ____ _ __ _ //// ___'_ __ _ (_) _ __ __ / / / / / / () / ___ | '_ |' _ | | / / / // ___) | | | | | | | | | | | | | | || (_ | |))))) '| ____ | .__ || | _ | | _ | | _/__, | / / / / / ===================================== ___ / = / _ // :: Spring Boot :: (v2.0.0.release) ... 2018-04-21 22: 21: 3. started on port(s): 8080 (http) with context path ''2018-04-21 22:21:34.710 INFO 27016 --- [ main] com.neo.CommandLineRunnerApplication : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)The OrderRunner1 start to initialize ...The OrderRunner2 start to initialize ...The Runner start to initialize ... Layanan telah dimulai.
Melalui output konsol, kami menemukan bahwa kelas implementasi yang menambahkan anotasi @Order dieksekusi terlebih dahulu, dan semakin kecil nilai di @order (), yang sebelumnya dimulai.
Dalam praktiknya, tujuan yang sama dapat dicapai dengan menggunakan ApplicationRunner, dan ada sedikit perbedaan di antara keduanya.
Contoh Kode: https://github.com/ityouknow/spring-cloud-examples (unduhan lokal)
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.