SpringBoot项目启动过程中做数据资源初始化的方式

简介: SpringBoot项目启动过程中做数据资源初始化的方式

SpringBoot项目经常遇到启动项目的过程中需要初始化一些数据,比如字典,前置条件数据之类的需求,这个时候需要在项目启动的过程中去做这一块的工作。下面根据经验总结了以下几种项目启动的时候初始化数据的方法,可以选择一个自己喜欢的,从项目启动运行可以看出来他们的加载顺序,在这里不对加载顺序做解释。

以下代码运行在jdk17,SpringBoot3.0.2环境下

先准备下面的接口和服务类,做三层业务逻辑开发的同学都懂

publicinterfaceInitService {
voidinitData();
}
@ServicepublicclassInitServiceImplimplementsInitService {
@Value("${data.param}")
privateStringdataParam;
@OverridepublicvoidinitData() {
System.out.println("initData Service:param is "+dataParam);
    }
}

准备个配置项在properties中

data.param=data param

一、直接在main方法里干,直接果断

@SpringBootApplicationpublicclassSpringbootApplication {
publicstaticvoidmain(String[] args) {
ApplicationContextac=SpringApplication.run(Springboot26DemoApplication.class, args);
InitServiceinitServiceImpl= (InitService) ac.getBean("initServiceImpl");
if(initServiceImpl!=null){
System.out.println("==== SpringApplication.run Start=====");
initServiceImpl.initData();
System.out.println("==== SpringApplication.run End=====");
        }else{
System.out.println("==== SpringApplication.run Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("==== SpringApplication.run End=====");
        }
    }
}

二、@PostConstruct注解

@SpringBootApplicationpublicclassSpringbootApplication {
publicstaticvoidmain(String[] args) {
ApplicationContextac=SpringApplication.run(Springboot26DemoApplication.class, args);
    }
@AutowiredprivateInitServiceinitServiceImpl;
@PostConstructpublicvoidinit(){
if(initServiceImpl!=null){
System.out.println("====PostConstruct Start=====");
initServiceImpl.initData();
System.out.println("====PostConstruct End=====");
        }else{
System.out.println("====PostConstruct Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====PostConstruct End=====");
        }
    }
}

三、InitializingBean接口

@ComponentpublicclassInitBeanInitimplementsInitializingBean {
@AutowiredprivateInitServiceinitServiceImpl;
@OverridepublicvoidafterPropertiesSet() throwsException {
if(initServiceImpl!=null){
System.out.println("====InitializingBean afterPropertiesSet Start=====");
initServiceImpl.initData();
System.out.println("====InitializingBean afterPropertiesSet End=====");
        }else{
System.out.println("====InitializingBean afterPropertiesSet Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====InitializingBean afterPropertiesSet End=====");
        }
    }
}

四、@Bean(initMethod = "init")注解

@ComponentpublicclassInitDataBean {
@AutowiredprivateInitServiceinitServiceImpl;
@Bean(initMethod="init")
publicvoidinit() {
if(initServiceImpl!=null){
System.out.println("====@Bean(initMethod = \"init\") Start=====");
initServiceImpl.initData();
System.out.println("====@Bean(initMethod = \"init\") End=====");
        }else{
System.out.println("====@Bean(initMethod = \"init\") Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====@Bean(initMethod = \"init\") End=====");
        }
    }
}

五、ApplicationListener<ApplicationReadyEvent>接口

@ComponentpublicclassInitAppListenerimplementsApplicationListener<ApplicationReadyEvent> {
@AutowiredprivateInitServiceinitServiceImpl;
@OverridepublicvoidonApplicationEvent(ApplicationReadyEventevent) {
if(initServiceImpl!=null){
System.out.println("====ApplicationReadyEvent Start=====");
initServiceImpl.initData();
System.out.println("====ApplicationReadyEvent End=====");
        }else{
System.out.println("====ApplicationReadyEvent Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====ApplicationReadyEvent End=====");
        }
    }
}

六、ApplicationRunner接口

@ComponentpublicclassInitAppRunnerimplementsApplicationRunner {
@AutowiredprivateInitServiceinitServiceImpl;
@Overridepublicvoidrun(ApplicationArgumentsargs) throwsException {
if(initServiceImpl!=null){
System.out.println("====ApplicationRunner Start=====");
initServiceImpl.initData();
System.out.println("====ApplicationRunner End=====");
        }else{
System.out.println("====ApplicationRunner Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====ApplicationRunner End=====");
        }
    }
}

七、CommandLineRunner接口

@ComponentpublicclassInitCommandRunnerimplementsCommandLineRunner {
@AutowiredprivateInitServiceinitServiceImpl;
@Overridepublicvoidrun(String... args) throwsException {
if(initServiceImpl!=null){
System.out.println("====CommandLineRunner Start=====");
initServiceImpl.initData();
System.out.println("====CommandLineRunner End=====");
        }else{
System.out.println("====CommandLineRunner Start=====");
System.out.println("====initServiceImpl is null=====");
System.out.println("====CommandLineRunner End=====");
        }
    }
}

输出结果如下:

====PostConstruct Start=====
initData Service:param is data param
====PostConstruct End=====
====InitializingBean afterPropertiesSet Start=====
initData Service:param is data param
====InitializingBean afterPropertiesSet End=====
====@Bean(initMethod = "init") Start=====
initData Service:param is data param
====@Bean(initMethod = "init") End=====
====ApplicationRunner Start=====
initData Service:param is data param
====ApplicationRunner End=====
====CommandLineRunner Start=====
initData Service:param is data param
====CommandLineRunner End=====
====ApplicationReadyEvent Start=====
initData Service:param is data param
====ApplicationReadyEvent End=====
==== SpringApplication.run Start=====
initData Service:param is data param
==== SpringApplication.run End=====


目录
相关文章
|
6月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
553 4
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
450 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
317 0
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1361 0
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
940 0
|
9月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
576 3
|
9月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
919 3
|
9月前
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
810 3
|
9月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
890 2
|
9月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
493 2

热门文章

最新文章

下一篇
开通oss服务