文章目錄
實際應用中,會有在項目服務啓動的時候就去加載一些數據或作一些事情的狀況。爲了解決這樣的問題,Spring Boot 爲咱們提供了一個方法,經過實現接口 CommandLineRunner 來實現,實現功能的代碼放在實現的run方法中。這段初始化代碼在整個應用生命週期內只會執行一次。
並且咱們能夠在run()方法裏使用任何依賴,由於它們已經初始化好了。java
如何使用CommandLineRunner接口
配合@Component註解使用
package com.nobody.config; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * @Description * @Author Mr.nobody * @date 2020/8/27 */ @Component @Order(value = 1) public class ApplicationStartupRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 Order=1 ----------"); } }
配合@SpringBootApplication註解使用
package com.nobody; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) throws Exception { System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 ----------"); } }
多個CommandLineRunner實現類的執行順序問題
一個應用可能存在多個CommandLineRunner接口實現類,若是咱們想設置它們的執行順序,能夠使用 @Order實現。若是不顯示設置web
package com.nobody.config; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * @Description * @Author Mr.nobody * @date 2020/8/27 */ @Component @Order(value = 2) public class ApplicationOrderStartupRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("---------- 服務啓動後執行,例如執行加載數據等操做 Order=2 ----------"); } }
啓動服務,能夠在控制檯看到在Spring Boot啓動完以後,執行了多個定義的CommandLineRunner實現類的run方法,而且按@Order註解設置的順序執行。
spring
注意:在實現CommandLineRunner接口時,run(String… args)方法內部若是拋異常的話,會直接致使應用啓動失敗,因此,必定要記得將危險的代碼放在try-catch代碼塊裏。ide
本文同步分享在 博客「Μr.ηobοdy」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。svg