Spring Boot如何使用Runner實現啟動時調用?用法和原理都在這里


 

在日常的項目開發中經常會遇到這樣的需求:項目啟動的時候進行一些一次性的初始化工作,如讀取加載資源文件、或者執行其它外部程序。

這個時候我們就可以用到spring-boot為我們提供的一種擴展機制--Runner。

在spring-boot中提供了兩種Runner接口:ApplicationRunner和CommandLineRunner,接下來我們就看看他們都是怎么使用的

Runner的使用

要想在我們的項目中使用ApplicaitonRunner和CommandLineRunner只需要實現如下代碼即可:

從代碼中我們可以看出使用上是非常方便的,只需要實現相應的接口類,然后創建bean即可。上面的代碼的輸出結果為:

ApplicaitonRunner和CommandLineRunner相比,它們雖然都只有一個run接口,但是各自接收的參數類型卻不一樣,這也是他們唯一的區別。

  • CommandLineRunner的run方法接收的是一個String類型的可變參數,它的值就是我們main函數接收到的命令行參數。
  • ApplicaitonRunner的run方法接收一個ApplicationArguments類型的參數,ApplicationArguments會對spring-boot程序的啟動參數進行解析和分類,把[--{operation-name}={operation-value}]解析操作參數,其它情況被分類為非操作參數。
--op1=value1 --op2=value2 arg1 arg2
操作類參數:op1---值為value2,op2---值為value2
非操作參數:arg1,arg2

Runner的實現原理

spring-boot的runner擴展的實現也是非常的簡單的。寫過spring-boot程序的朋友一定對SpringApplication.run方法影響深刻,我們今天講的runner也是在這個方法中被調用的。整個調用過程:

  1. SpringApplication.run調用callRunners方法
  2. 查找實現了ApplicationRunner和CommandLineRunner接口的Bean,統一存放在一個list中
  3. 根據Bean的order進行排序
  4. 循環調用每一個Runner Bean的run接口。

實現過程的核心代碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM