前言
项目开发中很多场景都需要在项目启动时加载数据库字典,定时任务等一些初始化任务,本文会分享一些SpingBoot启动的一些初始化方法,并对比分析下各个方法的优劣
一、几种初始化方法介绍和实例
1.@PostConstruct方式
JDK提供的注解方法,是常用的初始化加载数据方法,使用该注解的方法会在服务器加载Servlet的时候运行
1 |
|
2.InitializingBean方式
Spring框架提供的接口,不是常用的初始化加载数据方法,通常在Bean设置完成后自定义一些初始化逻辑,实现afterPropertiesSet方法即可初始化数据
1 |
|
3.ApplicationContextAware方式
Spring框架提供的接口,不是常用的初始化加载数据方法,通常利用Spring依赖注入的机制自定义一些逻辑实现业务类的解耦和增强,实现setApplicationContext方法即可初始化数据
1 |
|
4.CommandLineRunner方式
SpringBoot框架提供的接口,是常用的初始化加载数据方法,可以接收命令行参数args用于在应用程序启动后执行一些特定的任务,实现run方法即可初始化数据
1 |
|
5.ApplicationRunner方式
SpringBoot框架提供的接口,是常用的初始化加载数据方法,可以接收访问命令行参数和应用程序选项ApplicationArguments用于在应用程序启动后执行一些特定的任务,实现run方法即可初始化数据
1 |
|
二、几种初始化方对比
1.执行顺序对比
SpringBoot项目启动执行上文的5种样例代码,启动日志如下:

从上面执行的结果可以看出,ApplicationContextAware、InitializingBean和@PostConstruct方法是在项目启动前执行的,而CommandLineRunner和ApplicationRunner方法是在项目启动后立即执行的。
2.方法优劣和总结
ApplicationContextAware、InitializingBean和@PostConstruct方法是在项目启动前执行的,初始化数据方法中的bean有时需要依赖bean的创建顺序,需要通过@DependsOn注解和bean的顺序保证方法加载bean的顺利;CommandLineRunner和ApplicationRunner方法是在项目启动后执行的,此时所有的bean都已经顺利创建,初始化数据方法不需要考虑bean的依赖关系,且这两种方法更灵活可以有多个实现,多个实现也可以通过@Order注解控制方法加载顺序(@Order数值越小优先级越高);
综上所述,本人更推荐项目上使用CommandLineRunner和ApplicationRunner方法初始化加载数据。
- 本文作者: yinshuang
- 本文链接: https://yinshuang007.github.io/2023/05/31/SpringBoot启动常用的初始化加载数据方法/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!