關於這個ApplicationRunner的使用場景,今天有些新的理解。
1.說明
希望項目在啟動的時候加載一些系統參數,就要用到ApplicationRunner
ApplicationRunner是一個接口,我們需要實現它,並重寫run()方法,當項目啟動時,run()方法便會自動執行。
2.場景2
這個接口只有這點功能,我們也許感覺,springboot中在啟動中加載參數,只用application.yml更加方便。
其實,這里有一種場景就非常適合使用這種場景。
項目存在一個隊列,在項目一進行啟動就可以往隊列中添加數據,然后,從隊列中消費數據。
3.驗證
結構:

程序:
package com.jun.webpro.common.config.startup;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@Order(value = 1)
public class StartLoader implements ApplicationRunner {
@Override
public void run(ApplicationArguments args){
loadSysParams();
}
public void loadSysParams(){
System.out.println("【系統參數1】加載中...");
System.out.println("【系統參數1】加載完成...");
}
}
package com.jun.webpro.common.config.startup;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@Order(value = 2)
public class SecondLoader implements ApplicationRunner {
@Override
public void run(ApplicationArguments args){
loadSysParams();
}
public void loadSysParams(){
System.out.println("【系統參數2】加載中...");
System.out.println("【系統參數2】加載完成...");
}
}
4.結果:
可以發現,在程序啟動之后,這里才運行起來。
2020-03-23 19:03:01.910 INFO 14084 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9090 (http) with context path '' 2020-03-23 19:03:01.913 INFO 14084 --- [ main] com.jun.webpro.WebproApplication : Started WebproApplication in 6.988 seconds (JVM running for 7.941) 【系統參數1】加載中... 【系統參數1】加載完成... 【系統參數2】加載中... 【系統參數2】加載完成...
5.說明
@Order說明加載順序
@Component讓類進行自動加載。
