Spring Boot应用上下文启动前后代码执行插入点

5 篇文章 0 订阅

Spring Boot 提供了若干个代码执行点的事件和监听器,见 Application events and listeners

Spring Boot 可以使用内置的 tomcat 启动,也可以使用外部的,依据打包方式的不同,实现代码略有不同。

1. 打成 jar,使用内置的 tomcat 启动:

@SpringBootApplication
@ServletComponentScan
@MapperScan("com.hebta.plato.dao")
public class PlatoApplication {
	private Logger logger = LoggerFactory.getLogger(PlatoApplication.class);
	
	public static void main(String[] args) {
		SpringApplication springApplication = new SpringApplication(PlatoApplication.class);
	    
	    springApplication.addListeners( new BeforeStartEvent() );
	    springApplication.run(args);
	}
	
	// Boot 上下文启动完毕,可以对外提供请求服务的时候立即执行的
	@EventListener(ApplicationReadyEvent.class)
	public void whenReady(){
		logger.info("=========ApplicationReadyEvent=========");
	}
}

// Boot 上下文启动之前执行的
class BeforeStartEvent implements ApplicationListener<ApplicationEnvironmentPreparedEvent >{
	private Logger logger = LoggerFactory.getLogger(BeforeStartEvent.class);
    @Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent  event) {
    	logger.info("++++++++++BeforeStartEvent+++++++++");
    }	
}

2. 打成 war 包,放到外部的 tomcat 里面运行:

/**
 * 如果工程需要打成 jar 包并放到外部的tomcat里面,需要当前类促使Servlet容器加载 Spring Boot的启动类。 
 * 由于需要使用外部的tomcat,pom 文件里面需要将 tomcat-starter的scope调成provided
 *
 */
public class ServletInitializer extends SpringBootServletInitializer {
	
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {	
		application.listeners(new BeforeStartEvent(), new AfterEvent());
		return application.sources(PlatoApplication.class);
	}
}

// Boot 上下文启动之前执行的
class BeforeStartEvent implements ApplicationListener<ApplicationEnvironmentPreparedEvent >{
	private Logger logger = LoggerFactory.getLogger(BeforeStartEvent.class);
    @Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent  event) {
    	logger.info("++++++++++BeforeStartEvent+++++++++");
    }	
}

// Boot 上下文启动完毕,可以对外提供请求服务的时候立即执行的
class AfterEvent implements ApplicationListener<ApplicationReadyEvent>{
	private Logger logger = LoggerFactory.getLogger(AfterEvent.class);
    @Override public void onApplicationEvent(ApplicationReadyEvent event) {
    	logger.info("==========AfterEvent==========");
    }	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值