package com.lizongbo.tomcatdemo; import java.time.LocalDateTime; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.SmartLifecycle; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.ContextStartedEvent; import org.springframework.context.event.EventListener; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @Service @Order(Ordered.HIGHEST_PRECEDENCE) public class DemoTestSmartLifecycle implements SmartLifecycle { private static final Log logger = LogFactory.getLog(DemoTestSmartLifecycle.class); private volatile boolean running; private volatile boolean onrefreshed; private volatile boolean onStarted; @Override public void start() { logger.info("start|" + LocalDateTime.now()); running = true; } @Override public void stop() { logger.info("stop|" + LocalDateTime.now()); running = false; } @Override public boolean isRunning() { return running; } @EventListener @Order(Ordered.LOWEST_PRECEDENCE) public void onContextRefreshedEvent(ContextRefreshedEvent event) { logger.info("onContextRefreshedEvent|begin|" + event); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } this.onrefreshed = true; logger.info("onContextRefreshedEvent|done|" + event); } @EventListener @Order(Ordered.LOWEST_PRECEDENCE) public void onContextStartedEvent(ContextStartedEvent event) { logger.info("onContextStartedEvent|begin|" + event); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } this.onStarted = true; logger.info("onContextStartedEvent|done|" + event); } @Override public int getPhase() { return Integer.MAX_VALUE - 3; } public boolean isOnrefreshed() { return onrefreshed; } public boolean isOnStarted() { return onStarted; } }