在实际开发中,我们一般都会在配置文件(application.properties或者application.yml)中配置各个项目中集成的属性值,来进行各个组件的设置,比如配置端口:server.port=8080,但是在开发中我们需要配置业务得属性值来添加到springboot容器中,那么这个时候我们应该怎么办呢?
解决方案
实现ApplicationRunner接口
@Component
public class TestInitClass implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("------------------我在启动之前加载了-------------------
----");
}
}
实现CommandLineRunner 接口
@Component
public class TestInitClassByCommand implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("----------------你看我也是在启动之前加载的--------------
----------");
}
}
优先级
默认情况下ApplicationRunner比CommandLineRunner 先执行
总结
所有CommandLineRunner/ApplicationRunner的执行时点是在SpringBoot应用的ApplicationContext完全初始化开始工作之后, callRunners() 可以看出是run方法内部最后一个调用的方法(可以认为是main方法执行完成之前最后一步)
只要存在于当前SpringBoot应用的ApplicationContext中的任何CommandLineRunner/ApplicationRunner,都会被加载执行(不管你是手动注册还是自动扫描去Ioc容器)
使用@Order注解可以设置加载的顺序
一般情况我们只需要使用一个接口来加载初始化数据即可