springboot SmartLifeCycle说明


springboot SmartLifeCycle说明

 

应用:在spring ioc容器创建之后、关闭之前执行自定义的操作

 

 

******************************

相关类及接口

 

LifeCycle

public interface Lifecycle {
    void start();   //容器启动后调用

    void stop();    //容器关闭前调用

    boolean isRunning();  //当前应用是否正在运行
}

 

SmartLifeCycle

public interface SmartLifecycle extends Lifecycle, Phased {
    int DEFAULT_PHASE = 2147483647;

    default boolean isAutoStartup() {  //自动调用start()、stop()方法,默认自动调用
        return true;
    }

    default void stop(Runnable callback) {
        this.stop();    //调用stop()方法
        callback.run(); //如果不调用该方法,等待30s关闭容器;如果调用了该方法,不需要等待就可关闭容器
    }

    default int getPhase() {  //如果有多个继承了SmartLifeCycle接口的类,返回值小的start()方法先调用,stop()方法相反
        return 2147483647;
    }
}

 

DefaultLifecycleProcessor

public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactoryAware {
    private final Log logger = LogFactory.getLog(this.getClass());
    private volatile long timeoutPerShutdownPhase = 30000L;
    private volatile boolean running;
    @Nullable
    private volatile ConfigurableListableBeanFactory beanFactory;

***************
构造方法

    public DefaultLifecycleProcessor() {
    }

***************
相关方法

    public void setTimeoutPerShutdownPhase(long timeoutPerShutdownPhase) {
        this.timeoutPerShutdownPhase = timeoutPerShutdownPhase;
    }//设置容器关闭时等待时间,默认为30s

 

 

******************************

示例:stop(Runnable callback)使用默认方法,调用callback.run()

 

CustomSmartLifeCycle

@Component
public class CustomSmartLifeCycle implements SmartLifecycle {

    private boolean isRunning=false;

    public void setRunning(boolean running) {
        isRunning = running;
    }

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

    @Override
    public void start() {
        System.out.println("开始执行:"+LocalDateTime.now());
        this.setRunning(true);
    }

    @Override
    public void stop() {
        System.out.println("stop:"+ LocalDateTime.now());
        this.setRunning(false);
    }
}

 

*************************

控制台输出

 

      

说明:ctrl+c,应用立即关闭

 

 

******************************

示例:stop(Runnable callback)不调用callback.run()

 

CustomSmartLifeCycle

@Component
public class CustomSmartLifeCycle implements SmartLifecycle {

    private boolean isRunning=false;

    public void setRunning(boolean running) {
        isRunning = running;
    }

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

    @Override
    public void start() {
        System.out.println("开始执行:"+LocalDateTime.now());
        this.setRunning(true);
    }

    @Override
    public void stop() {
        System.out.println("stop:"+ LocalDateTime.now());
        this.setRunning(false);
    }

    @Override
    public void stop(Runnable callback) {
        this.stop();
    }
}

 

*************************

控制台输出

 

      

说明:ctrl+c,应用在30s后关闭

 

 

******************************

示例:设置默认关闭时间

 

CustomSmartLifeCycle

@Component
public class CustomSmartLifeCycle implements SmartLifecycle {

    private boolean isRunning=false;

    public void setRunning(boolean running) {
        isRunning = running;
    }

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

    @Override
    public void start() {
        System.out.println("开始执行:"+LocalDateTime.now());
        this.setRunning(true);
    }

    @Override
    public void stop() {
        System.out.println("stop:"+ LocalDateTime.now());
        this.setRunning(false);
    }

    @Override
    public void stop(Runnable callback) {
        this.stop();
    }
}

 

WebConfig

@Configuration
public class WebConfig {

    @Bean("lifecycleProcessor")  //需指定bean的id:lifecycleProcessor
    public DefaultLifecycleProcessor initDefaultLifeCycleProcessor(){
        DefaultLifecycleProcessor defaultLifecycleProcessor=new DefaultLifecycleProcessor();
        defaultLifecycleProcessor.setTimeoutPerShutdownPhase(20000L);

        return defaultLifecycleProcessor;
    }
}

 

*************************

控制台输出

 

     

说明:默认关闭时间设置为20s

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值