关于这个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让类进行自动加载。