在实际开发中,我们一般都会在配置文件(application.properties或者application.yml)中配置各个项目中集成的属性值,来进行各个组件的设置,比如配置端口:server.port=8080,但是在开发中我们需要配置业务得属性值来添加到springboot容器中,那么这个时候我们应该怎么办呢?

解决方案

实现ApplicationRunner接口

  1. @Component
  2. public class TestInitClass implements ApplicationRunner {
  3. @Override
  4. public void run(ApplicationArguments args) throws Exception {
  5. System.out.println("------------------我在启动之前加载了-------------------
  6. ----");
  7. }
  8. }

实现CommandLineRunner 接口

  1. @Component
  2. public class TestInitClassByCommand implements CommandLineRunner {
  3. @Override
  4. public void run(String... args) throws Exception {
  5. System.out.println("----------------你看我也是在启动之前加载的--------------
  6. ----------");
  7. }
  8. }

优先级

默认情况下ApplicationRunner比CommandLineRunner 先执行

总结

所有CommandLineRunner/ApplicationRunner的执行时点是在SpringBoot应用的ApplicationContext完全初始化开始工作之后, callRunners() 可以看出是run方法内部最后一个调用的方法(可以认为是main方法执行完成之前最后一步)
只要存在于当前SpringBoot应用的ApplicationContext中的任何CommandLineRunner/ApplicationRunner,都会被加载执行(不管你是手动注册还是自动扫描去Ioc容器)
使用@Order注解可以设置加载的顺序
一般情况我们只需要使用一个接口来加载初始化数据即可