spring-初始化完成后运行指定内容
Spring 运行 内容 指定 完成 初始化
2023-09-27 14:20:51 时间
方案1:继承ApplicationListener
public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { //需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。 }
同时在Spring的配置文件中,添加注入:
<bean class="com.listener.InstantiationTracingBeanPostProcessor"/>
但是这个时候,会存在一个问题,在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。
这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理,修改后代码
如下:
public void onApplicationEvent(ContextRefreshedEvent event) { if(event.getApplicationContext().getParent() == null){//root application context 没有parent,他就是老大. //需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。 }
方法2:使用注解@PostConstruct
只需要在需要启动的时候执行的方法上标注这个注解就搞定了。
@PostConstruct private void startLoad(){ Thread t1 = new Thread(new Runnable() { public void run() { refresh(); } }); t1.start(); }
相关文章
- Spring源码编译报错:reactor.core.publisher中的MonoProcessor已过时
- Spring源码解析FactoryBean
- Spring Boot 2.4 版本的系统运行要求
- Spring学习笔记
- Spring Boot + Jasper Report + MySQL Database Example
- 转: 使用maven给spring项目打可直接运行的jar包(配置文件内置外置的打法)
- spring官方文档地址
- Spring之AOP原理、代码、使用详解(XML配置方式)
- 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布
- 解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)
- [Spring Framework]DI依赖注入①
- 利用 Spring Boot 在 Docker 中运行 Hadoop
- Spring系列(三):Spring IoC中各个注解的理解和使用
- Spring事务只对运行时异常回滚
- spring boot自定义starter
- 分布式事务、多数据源、分库分表中间件之spring boot基于Atomikos+XADataSource分布式事务配置(100%纯动态)