springboot关闭销毁时执行方法设置

wylc123 1年前 ⋅ 1674 阅读

一种是实现DisposableBean接口

package com.zkn.learnspringboot.destory;
 
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.ExitCodeGenerator;
import org.springframework.stereotype.Component;
 
/**
 * Created by zkn on 2016/8/14.
 */
@Component
public class TestImplDisposableBean implements DisposableBean, ExitCodeGenerator {
 
    @Override
    public void destroy() throws Exception {
 
        System.out.println("<<<<<<<<<<<我被销毁了......................>>>>>>>>>>>>>>>");
        System.out.println("<<<<<<<<<<<我被销毁了......................>>>>>>>>>>>>>>>");
    }
 
    @Override
    public int getExitCode() {
 
        return 5;
    }
}

一种是使用@PreDestroy注解。

package com.zkn.learnspringboot.destory;
 
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
 
/**
 * Created by zkn on 2016/8/14.
 */
@Component
public class TestAnnotationPreDestroy {
 
    @PreDestroy
    public void destory() {
 
        System.out.println("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、");
        System.out.println("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、");
    }
}

第三种,通过监听事件来实现。

程序启动事件监听器,代码如下:

package syb.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public class StartListener implements ApplicationListener<ContextRefreshedEvent> {
    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        logger.info("程序启动");
    }

}

 程序停止事件监听器,代码如下:

package syb.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;

public class CloseListener implements ApplicationListener<ContextClosedEvent> {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        logger.info("程序停止");
    }
}

启动引导类代码如下,此处需要将前面的两个监听器添加到SpingApplication对象中:

package syb.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication sa = new SpringApplication(App.class);
        sa.addListeners(new StartListener());
        sa.addListeners(new CloseListener());
        sa.run(args);
    }
}

经测试当发布到tomcat中时第一种方法在ctrl+c停止时会执行。其他没有执行。

当将程序打包,上传至linux系统,启动程序,可以看到打印“程序启动”,使用kill命令终止程序,可以看到打印“程序停止”。

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: