Hello大家好,本章我們新增專案啟動時初始化資源功能 。有問題可以聯絡我mr_beany@163.com。另求各路大神指點,感謝
在我們實際工作中,總會遇到這樣需求,在專案啟動的時候需要做一些初始化的操作,比如讀取配置檔案資訊,資料庫連線,清除快取資訊等。在Spring Boot中給我們提供了兩個介面來幫助我們實現這樣的需求。這兩個介面就是我們今天要講的CommandLineRunner和ApplicationRunner,他們的執行時機為容器啟動完成的時候。
一:共同點和區別
共同點:其一執行時機都是在容器啟動完成的時候進行執行;其二這兩個介面中都有一個run()方法;
不同點:ApplicationRunner中run方法的引數為ApplicationArguments,而CommandLineRunner介面中run方法的引數為String陣列。
二:使用ApplicationRunner來完成需求
建立core→startuprunner→StartupRunner1
package com.example.demo.core.startuprunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(value = 1)
public class StartupRunner1 implements ApplicationRunner {
private static final Logger logger = LoggerFactory.getLogger(StartupRunner1.class);
@Override
public void run(ApplicationArguments var1) throws Exception{
logger.info("伺服器啟動成功!<<<<使用ApplicationRunner介面");
}
}複製程式碼
注意:需要新增@Component,不然SpringBoot掃描不到這個類,不會執行。
啟動伺服器,我們可以看見
三:使用CommandLineRunner來完成需求
建立core→startuprunner→StartupRunner2
package com.example.demo.core.startuprunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(value = -1)
public class StartupRunner2 implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(StartupRunner2.class);
@Override
public void run(String... args) throws Exception{
logger.info("伺服器啟動成功!<<<<使用CommandLineRunner介面");
}
}
複製程式碼
我們可以看見已經輸出成功,並且CommandLineRunner 在 ApplicationRunner 先執行
四:使用Order註解修改執行順序
如果有多個實現類,而我們需要按照一定的順序執行的話,那應該怎麼辦
解決方案:在實現類上加上@Order註解指定執行的順序
需要注意:數字越小,優先順序越高,也就是@Order(1)註解的類會在@Order(2)註解的類之前執行。
專案地址
碼雲地址: gitee.com/beany/mySpr…
GitHub地址: github.com/MyBeany/myS…
寫文章不易,如對您有幫助,請幫忙點下star
結尾
新增專案啟動時初始化資源功能已完成,後續功能接下來陸續更新,有問題可以聯絡我mr_beany@163.com。另求各路大神指點,感謝大家。