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勾上
随机推荐
- KingbaseES V8R6 等待事件之LWLock Buffer_IO
等待事件含义 当进程同时尝试访问相同页面时,等待其他进程完成其输入/输出(I/O)操作时,会发生LWLock:BufferIO等待事件.其目的是将同一页读取到共享缓冲区中. 每个共享缓冲区都有一个与L ...
- Windows10基于Visual Studio 2019配置OpenCV4.X
下载OpenCV OpenCV官网 我们是Windows环境所以选择 Windows 配置环境变量 创建一个Visual Studio项目 配置Visual Studio属性 在包含目录中引入路径: ...
- 13 CSS 的position属性
13 CSS 的position属性 就像photoshop中的图层功能会把一整张图片分层一个个图层一样,网页布局中的每一个元素也可以看成是一个个类似图层的层模型.层布局模型就是把网页中的每一个元素看 ...
- 父组件明明使用了v-model,子组件竟然可以不用定义props和emit抛出事件,快来看看吧
前言 vue3.4增加了defineModel宏函数,在子组件内修改了defineModel的返回值,父组件上v-model绑定的变量就会被更新.大家都知道v-model是:modelValue和@u ...
- C# 方法参数中的this参数
引用:C# 方法中的this参数 - zh89233 - 博客园 (cnblogs.com) public static class StringExtension { public static v ...
- 教你构建一个优秀的SD Prompt
构建一个优秀的Prompt 在使用Stable Diffusion AI时,构建一个有效的提示(Prompt)是至关重要的第一步.这个过程涉及到创造性的尝试和对AI行为的理解.这里我会对如何构建一个好 ...
- 使用Helm部署Wikijs
使用 Helm 部署 Wiki.js ️ 参考文档: Wiki.js 官方文档 - 安装 - Kubernetes Wiki.js 使用 Helm 安装 Wiki.js 官方文档 - 安装 - 侧加载 ...
- HarmonyOS跨进程通信—IPC与RPC通信开发指导
一.IPC与RPC通信概述 基本概念 IPC(Inter-Process Communication)与RPC(Remote Procedure Call)用于实现跨进程通信,不同的是前者使用Bi ...
- HarmonyOS网络管理开发—Socket连接
简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议. 基本概念 ● Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. ● ...
- Centos7、CentOS8、CentOS9 修改硬盘分区大小扩充root分区大小
Centos7 修改硬盘分区大小,实现CentOS无损分区扩容 扩充root分区大小 安装了CentOS7 开发环境及软件后,发现root分区已经才剩下不到1G空间,难不成要干掉重装,OMG,NO! ...