package com.maweis.lotus; import com.maweis.lotus.handler.Constant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import sun.misc.Signal; import sun.misc.SignalHandler; import java.util.concurrent.TimeUnit; @Component public class ShutdownHandler implements SignalHandler { private static Logger logger = LoggerFactory.getLogger(LotusApplication.class); static { Signal sig = new Signal(getOSSignalType()); Signal.handle(sig, new ShutdownHandler()); } private static String getOSSignalType() { return System.getProperties().getProperty("os.name"). toLowerCase().startsWith("win") ? "INT" : "USR2"; } /** * 处理信号 * * @param signal 信号 */ public void handle(Signal signal) { logger.info("=========停止服务开始."); Constant.HAS_RECV_STOP_SIGNAL = true; logger.info("ShutdownHook execute start..."); try { TimeUnit.SECONDS.sleep(5); logger.info("模拟应用进程退出前的处理操作"); } catch (InterruptedException e) { e.printStackTrace(); } logger.info("ShutdownHook execute end..."); Runtime.getRuntime().exit(0); } }
通过监测kill 信号参数 在停服前做些清理或扫尾工作
最新推荐文章于 2022-01-04 19:56:51 发布