springboot项目启动后执行方法的三种方式
目录
- 1 方法
- 方法1:spring的ApplicationListener< ContextRefreshedEvent>接口
- 方法2:springboot的ApplicationRunner接口
- 方法3:springboot的CommandLineRunner接口
- 2 指定执行顺序
- 3 原理
1 方法
- ApplicationListener< ContextRefreshedEvent> 不推荐
- ApplicationListener推荐
- CommandLineRunner 推荐
方法1:spring的ApplicationListener< ContextRefreshedEvent>接口
实现ApplicationListener接口,并实现 onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent)方法
@Servicepublic class SearchReceive implementsApplicationListener{@Overridepublic void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {if (contextRefreshedEvent.getApplicationContext().getParent() == null) {//保证只执行一次//需要执行的方法}}}
方法2:springboot的ApplicationRunner接口
ApplicationListener和CommandLineRunner两个接口是springBoot提供用来在spring容器加载完成后执行指定方法。两个接口区别主要是入参不同。
实现ApplicationRunner接口
@Component@Order(value = https://www.it610.com/article/1)public class AfterRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("执行方法"); }}
方法3:springboot的CommandLineRunner接口
实现CommandLineRunner接口
@Component@Order(value = https://www.it610.com/article/2)public class CommandLineRunnerImpl implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("执行方法"); }}
注:如果同时implementsApplicationListener和CommandLineRunner两个接口,ApplicationRunner接口的方法先执行,CommandLineRunner后执行;
@Slf4j@Componentpublic class RunnerTest implements ApplicationRunner, CommandLineRunner { @Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("服务启动RunnerTestApplicationRunner执行启动加载任务..."); } @Overridepublic void run(String... args) throws Exception {System.out.println("服务启动RunnerTestCommandLineRunner 执行启动加载任务..."); }}}
2 指定执行顺序 当项目中同时实现了ApplicationRunner和CommondLineRunner接口时,可使用Order注解或实现Ordered接口来指定执行顺序,值越小越先执行。
3 原理 SpringApplication 的run方法会执行afterRefresh方法。
afterRefresh方法会执行callRunners方法。
callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法。
【springboot项目启动后执行方法的三种方式】到此这篇关于springboot项目启动后执行方法的三种方式的文章就介绍到这了,更多相关springboot启动后执行方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- C++|C++实现---学生选课系统
- 大厂面试题精华总结|SpringBoot面试百题集
- 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍
- 毕业设计|SpringBoot+Vue项目旅游信息推荐系统【源码开源】
- Vue3+TS+Vite+NaiveUI搭建一个项目骨架实现
- Springboot详解线程池与多线程及阻塞队列的应用详解
- SprintBoot深入浅出讲解场景启动器Starter
- 一文带你从零开始搭建vue3项目
- vite项目require语法兼容问题解决 require is not defined
- IDEA|将eclipse中的动态项目导入Idea中运行(配置和启动)