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