คำนำ
ในงานจริงของเราเรามักจะพบข้อกำหนดดังกล่าว เมื่อโครงการเริ่มต้นเราจำเป็นต้องดำเนินการเริ่มต้นบางอย่างเช่นการเริ่มต้นพูลเธรดโหลดใบรับรองการเข้ารหัสล่วงหน้า ฯลฯ วันนี้ฉันจะแนะนำเครื่องมือการบูตฤดูใบไม้ผลิซึ่งออกแบบมาโดยเฉพาะเพื่อช่วยคุณแก้ปัญหาการเริ่มต้นทรัพยากรของการเริ่มต้นโครงการ
สิ่งประดิษฐ์นี้คือ Commandlinerunner ส่วนประกอบของอินเทอร์เฟซ CommandlinerUnner จะถูกดำเนินการก่อน SpringApplication.run () หลังจากที่ SpringBeans ทั้งหมดเริ่มต้นซึ่งเหมาะมากสำหรับการเริ่มต้นข้อมูลบางอย่างที่เริ่มต้นของการเริ่มต้นแอปพลิเคชัน
ต่อไปเราจะใช้กรณีเพื่อทดสอบวิธีการใช้งาน ก่อนการทดสอบให้เพิ่มการพิมพ์สองบรรทัดให้กับคลาสเริ่มต้นเพื่ออำนวยความสะดวกให้เราระบุเวลาดำเนินการของ Commandlinerunner
@springbootapplicationPublic คลาส CommandlinerunnerApplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {system.out.println ("บริการที่จะเริ่มต้น"); SpringApplication.run (CommandlinerunnerApplication.class, args); System.out.println ("บริการเริ่มต้นขึ้นแล้ว"); -ต่อไปเราจะสร้างคลาสที่สืบทอดมาจาก Commandlinerunner โดยตรงและใช้วิธีการเรียกใช้ ()
@ComponentPublic Class Runner ใช้ CommandLinerUnner {@Override โมฆะสาธารณะเรียกใช้ (สตริง ... args) พ่นข้อยกเว้น {system.out.println ("นักวิ่งเริ่มเริ่มต้น ... "); -เราพิมพ์พารามิเตอร์บางอย่างในวิธีการเรียกใช้ () เพื่อดูว่ามันดำเนินการอย่างไร หลังจากเสร็จสิ้นให้เริ่มโครงการสำหรับการทดสอบ:
... บริการที่จะเริ่ม. ____ __ _ //// / ___'_ __ _ (_) _ ____ _ / / / / / (() / ___ | '_ |' _ | / / / `| / / / / / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - - - - - / / / / / ========================================= ____ / = / _ / _ / :: boot Spring :: (v2.0.0.0.0.0212-04-21 22: 21: 34.706 Osbwembedded.tomcat.tomcatwebserver: Tomcat เริ่มต้นที่พอร์ต (S): 8080 (http) ด้วยเส้นทางบริบท '' 2018-04-21 22: 21: 34.710 ข้อมูล 27016 --- [หลัก] com.neo.CommandlinerApplication: เริ่มต้น เริ่มต้น ... บริการได้เริ่มขึ้นแล้ว
จากข้อมูลการพิมพ์ของคอนโซลเราจะเห็นว่าวิธีการใน Commandlinerunner จะถูกดำเนินการหลังจากโหลดคอนเทนเนอร์สปริงบูตและโครงการจะเริ่มขึ้นหลังจากการดำเนินการเสร็จสมบูรณ์
หากเราต้องการเริ่มต้นทรัพยากรจำนวนมากเมื่อเริ่มต้นคอนเทนเนอร์และทรัพยากรเริ่มต้นจะถูกสั่งซื้อซึ่งกันและกันเราจะมั่นใจได้อย่างไรว่าลำดับการดำเนินการของผู้บัญชาการทหารที่แตกต่างกันได้อย่างไร Spring Boot ยังให้บริการโซลูชัน นั่นคือการใช้คำอธิบายประกอบ @order
เราสร้างคลาสการใช้งาน commandlinerunner สองคลาสเพื่อทดสอบ:
คลาสการใช้งานครั้งแรก:
@component @order (1) คลาสสาธารณะ orderrunner1 ใช้ commandlinerunner {@Override โมฆะสาธารณะเรียกใช้ (สตริง ... args) โยนข้อยกเว้น {system.out.println ("orderrunner1 เริ่มต้นเพื่อเริ่มต้น ... "); -คลาสการใช้งานที่สอง:
@component @order (2) คลาสสาธารณะ orderrunner2 ใช้ commandlinerunner {@Override โมฆะสาธารณะเรียกใช้ (สตริง ... args) โยนข้อยกเว้น {system.out.println ("orderrunner2 เริ่มต้นเพื่อเริ่มต้น ... "); -หลังจากการเพิ่มเสร็จสิ้นให้รีสตาร์ทและสังเกตคำสั่งดำเนินการ:
... บริการที่จะเริ่มต้น - - - - - - - - - - - - - - - - - - - / / / / / ====================================== ___ / = / _ // :: boot Spring :: (v2.0.0.0.RELEASE) ... 2018-04-21 22: 21: 34.706 ข้อมูล 27016 --- Tomcat เริ่มต้นที่พอร์ต: 8080 (http) พร้อมเส้นทางบริบท '' 2018-04-21 22: 21: 34.710 ข้อมูล 27016 --- [main] com.neo.CommandlinerUnnerApplication: เริ่มต้นการเริ่มต้นการเริ่มต้น เริ่มต้น ... บริการได้เริ่มขึ้นแล้ว
ผ่านเอาต์พุตของคอนโซลเราพบว่าคลาสการใช้งานที่เพิ่ม @order Annotation จะถูกดำเนินการก่อนและยิ่งค่าที่เล็กลงใน @order () ก่อนหน้านี้จะเริ่มขึ้น
ในทางปฏิบัติวัตถุประสงค์เดียวกันสามารถทำได้โดยใช้ ApplicationRunner และมีความแตกต่างกันเล็กน้อยระหว่างทั้งสอง
ตัวอย่างโค้ด: https://github.com/ityouknow/spring-cloud-examples (ดาวน์โหลดในพื้นที่)
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com