SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别
0、参考、业务需求
- 参考:
https://www.cnblogs.com/java-chen-hao/p/11835120.html#_label1
https://zhuanlan.zhihu.com/p/541268993 - 业务需求:
缓存数据字典数据、初始化线程池、提前加载好加密证书
1、方式
- 实现 ApplicationRunner 接口
- 实现 CommandLineRunner 接口
- 实现 InitializingBean 接口
- 使用 @PostConstruct 标签
2、@Order
- 可以使用@Order注解或Ordered接口改变 ApplicationRunner 和 CommandLineRunner执行顺序
- @Order 对 InitializingBean 和 @PostConstruct 不生效。
3、测试使用
- ApplicationRunner
@Component
@Order(3)
public class App01 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("App01_执行了……@Order(3)");
}
}
@Component
@Order(2)
public class App02 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("App02_执行了……@Order(2)");
}
}
- CommandLineRunner
@Component
@Order(1)
public class Com01 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("Com01_执行了……@Order(1)");
}
}
@Component
@Order(0)
public class Com02 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("Com02_执行了……@Order(0)");
}
}
- InitializingBean
/** @Order没用
* @author CC
* @since 2023/5/17 0017
*/
@Component
@Order(7)
public class Ini01 implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Ini01_执行了……@Order(7)");
}
}
/** @Order没用
* @author CC
* @since 2023/5/17 0017
*/
@Component
@Order(4)
public class Ini02 implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Ini02_执行了……@Order(4)");
}
}
- @PostConstruct
/** @Order没用
* @author CC
* @since 2023/5/17 0017
*/
@Component
@Order(6)
public class Pos01 {
@PostConstruct
public void customizeName(){
System.out.println("Pos01_执行了……@Order(6)");
}
}
/** @Order没用
* @author CC
* @since 2023/5/17 0017
*/
@Component
@Order(5)
public class Pos02 {
@PostConstruct
public void customizeName(){
System.out.println("Pos02_执行了……@Order(5)");
}
}
4、执行顺序、建议使用

- 通过实现得出执行顺序
InitializingBean > @PostConstruct > ApplicationRunner > CommandLineRunner
- 没有执行顺序要求,使用:@PostConstruct
- 有执行顺序要求,使用:ApplicationRunner(推荐)或者CommandLineRunner
SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别的更多相关文章
- 基于spring的web项目启动时预加载数据到ServletContext
1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...
- 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager
问题描述 最近在进行一个项目的开发,其中使用到了Tablayout+Fragment+viewPager来搭建一个基本的框架,从而出现了设置数据适配器的时候,item的位置错乱问题.我打印log日志的 ...
- CommandLineRunner预加载数据
在使用SpringBoot构建项目时,我们通常有一些预先数据的加载.那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner. CommandLineRunner是一个接 ...
- Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等
继续并发专题~ FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞. 由于:Fu ...
- [十五]SpringBoot 之 启动加载数据
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来 ...
- Springboot项目自动加载设置
SpringBoot是允许项目自动加载的,但是需要在pom文件映入依赖库 1.导入依赖库 <dependency> <groupId>org.springframework.b ...
- STS启动springboot项目,加载不了resources下的配置文件的问题
从这篇博客的评论中找到了解决方案 答案: eclipse的设置中,它默认是不包括resources下的文件的,把它改了就行了 原本用idea没这些事的,不过idea旗舰版到期了,社区版的话,对前端又没 ...
- idea配置springBoot项目热加载
1.在application.properties中禁用模板引擎缓存 比如freemarker:spring.freemarker.cache=false 2.在pom.xml中添加依赖 <de ...
- idea | SpringBoot项目热加载
第一步: 在pom文件添加依赖: <dependency> <groupId>org.springframework.boot</groupId> <arti ...
- idea加载springboot 项目热加载失效
需要打开 help -> find action ->registry ->其中的compiler.automake.allow.when.app.running勾上
随机推荐
- C# 人脸检测 人脸比对 活体检测 口罩检测 年龄预测 性别预测 眼睛状态检测
基于以下开源软件做了一个Demo GitHub - ViewFaceCore/ViewFaceCore: C# 超简单的离线人脸识别库.( 基于 SeetaFace6 ) 效果 代码 using Sy ...
- RelationNet++:基于Transformer融合多种检测目标的表示方式 | NeurIPS 2020
论文提出了基于注意力的BVR模块,能够融合预测框.中心点和角点三种目标表示方式,并且能够无缝地嵌入到各种目标检测算法中,带来不错的收益 来源:晓飞的算法工程笔记 公众号 论文: RelationN ...
- ue4-c++定时器和时间轴简易模板
定时器Delay 在头文件中需要声明TimerHandle和功能函数,功能函数是计时结束后执行的功能 在源文件中利用GetWorldTimerManager()实现定时器的开启(绑定功能函数)和清除. ...
- 探索Django REST框架构建强大的API
本文分享自华为云社区<探索Django REST框架构建强大的API>,作者:柠檬味拥抱. 在当今的Web开发中,构建强大的API已经成为了不可或缺的一部分.而在Python领域,Djan ...
- HTTP Web安全
验证安全机制 会话管理机制 SQL注入原理 SELECT * FROM test.user WHERE username='' or 1='1' and password='anyxxxxx'; 当u ...
- 讲讲百度地图API遇到的坑,石锤百度官方代码的错,解决SN校验失败
这两天在做一个项目,用到了百度地图API,根据坐标获取具体位置,总结一下遇到的几个坑 本文基于最新的V3接口,网上好多要么是V2,要么根据地址获取坐标,本文是唯一一个最新的3,根据坐标获取位置的完整说 ...
- Jetty的https模块
启用https模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=https 命令的输出,如下: INFO : https initial ...
- Qt For OpenHarmony
本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第29期 | Qt For OpenHarmony > 演讲嘉宾 | 蔡万苍 回顾整理 | 廖 涛 排版校对 | ...
- default_statistics_target参数对PG和MogDB性能影响测试和分析
default_statistics_target 参数对 PG 和 MogDB 性能影响测试和分析 本文出处:https://www.modb.pro/db/230160 前段时间在某客户生产环境优 ...
- Graph Embedding-DeepWalk
一言以蔽之,DeepWalk是在graph上,通过随机游走来产生一段定长的结点序列,并将其通过word2vec的方式获得各个结点的embedding的算法. DeepWalk一共涉及以下几个内容: 随 ...