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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Allen_jinjie/article/details/77095274

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==========");
    }	
}


猜你喜欢

转载自blog.csdn.net/Allen_jinjie/article/details/77095274
今日推荐