springboot优雅停机的一种实现

springboot优雅停机的一种实现

  • 定义一个事件监听器StopListenner

定义一个事件监听器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");
		}));
	}
}

你可能感兴趣的:(spring,boot,java)