【Spring Boot】Spring Boot之三种容器启动后进行相关应用初始化操作方法

一、方式一,使用ApplicationListener<E extends ApplicationEvent>监听ContextRefreshedEvent事件

/**
 * @author zhangboqing
 * @date 2019-11-03
 */
@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private MyService myService;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        System.out.println(">>>>>>>>>>>>>> ApplicationListener:" + myService.sayHello());
    }
}

二、方式二,使用SmartInitializingSingleton

/**
 * @author zhangboqing
 * @date 2019-11-03
 */
@Component
public class MySmartInitializingSingleton implements SmartInitializingSingleton {
    @Autowired
    private MyService myService;

    @Override
    public void afterSingletonsInstantiated() {
        System.out.println(">>>>>>>>>>>>>> SmartInitializingSingleton:" + myService.sayHello());
    }
}

三、方式三,使用SmartLifecycle

/**
 * @author zhangboqing
 * @date 2019-11-03
 */
@Component
public class MySmartLifecycle implements SmartLifecycle {

    @Autowired
    private MyService myService;

    @Override
    public void start() {
        System.out.println(">>>>>>>>>>>>>> SmartLifecycle:" + myService.sayHello());
    }

    @Override
    public boolean isAutoStartup() {
        return true;
    }

    @Override
    public void stop(Runnable callback) {

    }

    @Override
    public void stop() {

    }

    @Override
    public boolean isRunning() {
        return false;
    }

    @Override
    public int getPhase() {
        return 0;
    }
}

原文地址:https://www.cnblogs.com/756623607-zhang/p/11789199.html

时间: 2024-10-25 05:55:35

【Spring Boot】Spring Boot之三种容器启动后进行相关应用初始化操作方法的相关文章

Spring容器启动后注入service到Servlet并自动执行

通常做法是定义一个Servlet,并在web.xml中配置Servlet的启动顺序<load-on-startup>的值在DispatcherServlet之后.但这样做的缺点是在Servlet中无法使用Spring的依赖注入功能,只能使用WebApplicationContext的getBean()方法获取bean. 找到的解决办法如下: 1.自定义一个用于代理启动Servlet的类DelegatingServletProxy: package cn.edu.swu.oa.common.ut

@EnableAsync annotation metadata was not injected Spring容器启动后访问Servlet报错

@EnableAsync annotation metadata was not injected 2015年12月20日 20:06:54 7570 在初始化spring事务部分碰到该错误, 详细错误信息如下: [plain] view plain copy 警告: Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.

docker 容器启动后立马退出的解决方法

原因: 容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行. 解决方案: 启动脚本最后一个进程一定要用前台运行方式 即在进程最后不加 &(&表示在后台执行),否则容器退出 可在脚本后加  /bin/bash ,如果还不行,就换为 tail -f /dev/null (实时查看/dev/null) 原文地址:https://www.cnblogs.com/wangbaojun/p/10

容器启动后执行和执行数据库脚本

1 package com.jt.mongo.demo.modules.init; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 import org.springframework.context.ApplicationListener; 6 import org.springframework.context.event.ContextRefreshedEvent; 7 import org.springfr

STM32F103 ucLinux开发之四(内核启动后的调试)

Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后,下面两个宏定义,导致计算错误,从而Backtrace的. #define __pfn_to_page(pfn)     (mem_map + ((pfn) - ARCH_PFN_OFFSET)) #define __page_to_pfn(page)  ((unsigned long)((page

Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作

引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷 数据卷容器 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 卷会一直存在,直到没有容器使用 #(类似linux下的挂载(mount)) 创建数据卷 在用Docker ru

spring boot 监听容器启动

/** * 在容器启动的时候 加载没问完成的消息重发 * @author zhangyukun * */ @Component @Slf4j public class LoadMessageListener implements ApplicationListener<ContextRefreshedEvent>,Ordered { @Autowired QueueMessageService queueMessageService; @Override public int getOrder

Spring Boot web容器启动

一.启动前的准备: 1.SpringApplication构造方法,赋值webApplicationType Debug启动项目后,进入SpringApplication构造函数,里面有个webApplicationType 2.根据classpath下是否存在特定类来决定哪种类型,分别为SERVLET, REACTIVE, NONE deduceFromClasspath方法返回webApplicationType为Servlet 3.然后进入run方法,进入创建应用程序上下文方法create

spring boot 配置启动后执行sql, 中文乱码

spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: url: "jdbc:h2:mem:test" username: "sa" password: "" schema: database/import.sql sql-script-encoding: utf-8 type: com.alibaba.d