一种是实现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源点
注意:本文归作者所有,未经作者允许,不得转载