启动类上加
ApplicationContext app = SpringApplication.run(SentinelApplication.class, args);
ShutdownSignalHandler.install("TERM", app);//捕捉kill命令
ShutdownSignalHandler.install("INT", app);//捕捉ctrl+c命令
添加配置
import org.apache.curator.framework.CuratorFramework;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class ShutdownSignalHandler implements SignalHandler {
private static final Logger logger = LoggerFactory.getLogger(ShutdownSignalHandler.class);
private SignalHandler oldHandler;
private ApplicationContext context;
public ApplicationContext getContext() {
return context;
}
public void setContext(ApplicationContext context) {
this.context = context;
}
@Override
public void handle(Signal signal) {
signalAction(signal);
}
public static SignalHandler install(String signalName, ApplicationContext context) {
Signal diagSignal = new Signal(signalName);
ShutdownSignalHandler instance = new ShutdownSignalHandler();
instance.setContext(context);
instance.oldHandler = Signal.handle(diagSignal, instance);
return instance;
}
public void signalAction(Signal signal) {
try {
//关闭总开关
logger.info("\n执行优雅退出操作\n等待运行中任务执行完毕…………");
CuratorFramework curatorFramework = context.getBean(CuratorFramework.class);
if (null != curatorFramework) {
//curatorFramework.delete();
curatorFramework.close();
}
logger.info("\n================\n注册信息已经关闭!\n================");
if (null != oldHandler && !this.equals(oldHandler)) {
oldHandler.handle(signal);
}
} catch (Exception e) {
logger.error("handle|Signal handler" + "failed, reason " + e.getMessage());
}
}
}