前言
有时候我们业务需要在spring容器bean全部加载完成后执行,如分布式服务注册eureka、nacos等框架在服务启动后希望通知注册中心当前服务已启动,在服务停止时停止下线,这个时候就可以使用spring提供的SmartLifecycle
使用
直接上代码
@Component
public class StartSmartLifecycle implements SmartLifecycle {
private boolean running = false;
@Override
public void start() {
System.out.println("容器启动完成");
running = true;
}
@Override
public void stop() {
System.out.println("容器停止完成");
}
@Override
public boolean isRunning() {
return running;
}
}
SmartLifecycle 可实现的方法:
1、start :当容器bean全部加载完成后执行,需要注意必须isRunning()方法返回false时才会执行
2、stop :当容器关闭时执行,需要注意必须isRunning()方法返回true时才会执行
3、isRunning :代表当前服务的状态
扩展
其他实现相同的功能方法:
1、实现ApplicationListener<ContextRefreshedEvent>
接口
2、PostConstruct注解,需要注意的是PostConstruct注解是当前bean初始化完成时执行,而不是spring容器全部加载完执行