Hello你們好,本章咱們添加項目啓動時初始化資源功能 。有問題能夠聯繫我mr_beany@163.com。另求各路大神指點,感謝
在咱們實際工做中,總會遇到這樣需求,在項目啓動的時候須要作一些初始化的操做,好比讀取配置文件信息,數據庫鏈接,清除緩存信息等。在Spring Boot中給咱們提供了兩個接口來幫助咱們實現這樣的需求。這兩個接口就是咱們今天要講的CommandLineRunner和ApplicationRunner,他們的執行時機爲容器啓動完成的時候。
git
共同點:其一執行時機都是在容器啓動完成的時候進行執行;其二這兩個接口中都有一個run()方法; github
不一樣點:ApplicationRunner中run方法的參數爲ApplicationArguments,而CommandLineRunner接口中run方法的參數爲String數組。spring
建立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掃描不到這個類,不會執行。 數組
啓動服務器,咱們能夠看見緩存
建立core→startuprunner→StartupRunner2
bash
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 先執行服務器
若是有多個實現類,而咱們須要按照必定的順序執行的話,那應該怎麼辦ide
解決方案:在實現類上加上@Order註解指定執行的順序spa
須要注意:數字越小,優先級越高,也就是@Order(1)註解的類會在@Order(2)註解的類以前執行。
碼雲地址: gitee.com/beany/mySpr…
GitHub地址: github.com/MyBeany/myS…
寫文章不易,如對您有幫助,請幫忙點下star
添加項目啓動時初始化資源功能已完成,後續功能接下來陸續更新,有問題能夠聯繫我mr_beany@163.com。另求各路大神指點,感謝你們。