有时我们需要在SpringBoot启动成功后,执行一些回调方法。一般用于资源的初始化或者其他的的服务启动。
CommandLineRunner 和 ApplicationRunner
这是由SpringBoot提供的两个监听接口。由程序实现,并且标识@Component
注解,交于IOC管理。在SpringBoot启动成功后就会执行实现类的回调.
1. CommandLineRunner
import java.util.Arrays;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component; @Componentpublic class SpringListener implements CommandLineRunner { @Override public void run(String... args) throws Exception { // args 就是 main 函数的 args System.err.println("服务启动,args=" + Arrays.toString(args)); }}
2. ApplicationRunner
跟 CommandLineRunner
实质上一样,唯一不同的就是该接口对抽象方法的参数进行了封装。
@Componentpublic class SpringListener implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { args.containsOption("key"); args.getNonOptionArgs(); args.getOptionNames(); args.getOptionValues("key"); args.getSourceArgs(); } }
3. 优先级的控制
如果一个项目存在多个 `CommandLineRunner` 或者 `ApplicationRunner` 的实现。可以通过 `@Order` 注解来设置执行的优先级。`value` 值越小,越先执行。