springboot优雅停机的一种实现

springboot优雅停机的一种实现

定义一个事件监听器StopListenner

1.定义一个事件监听器StopListenner实现ApplicationListener
实现这个监听器的含义就是当应用环境准备就绪后执行指定的逻辑
2.设定一个AtomicBoolean 类型的原子变量用于向程序其他正在执行的线程等逻辑广播kill命令
3.在应用环境准备就绪的事件监听执行逻辑中Runtime.getRuntime().addShutdownHook(new Thread());
添加关闭钩子,在钩子线程中编写程序在完全关闭前你需要做的工作
下面展示我在kill命令执行后对线程池的关闭操作

@Component
public class StopListenner implements ApplicationListener<ApplicationReadyEvent> {

	public static AtomicBoolean boolKilling = new AtomicBoolean(false);

	@Autowired
	@Qualifier("datasync_executor")
	private ThreadPoolExecutor taskExecutor;

	@Override
	public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
		log.info("startup stopListener");
		Runtime.getRuntime().addShutdownHook(new Thread(() -> {
			log.info("listen quit signal");
			boolKilling.set(true);
			taskExecutor.shutdown();
			try {
				boolean flag = true;
				do {
					flag = !taskExecutor.awaitTermination(15000, TimeUnit.MILLISECONDS);
				} while (flag);
			} catch (InterruptedException e) {
				// ...
			}
			log.info("start quit progress");
		}));
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值