如何让java程序平滑停止
程序员文章站
2022-06-13 15:00:52
...
前言
在敏捷开发中,迭代周期较快,版本发布频繁,需要经常更新到生产环境。新版本发布时,需要停止旧版本的程序。在停止旧版本程序的过程,我们希望旧版本程序能平滑停止,所谓的平滑停止,是指不会产生脏数据、事务不一致、数据状态已改变却未更新到数据库、kafka消费了数据而没有更新offset等问题。
如何让java程序退出
1.kill -9 pid 强制退出
2.kill -15 pid 发送信号给java程序,java程序如有Runtime.getRuntime().addShutdownHook(thread),会执行完后再退出
3.jmx,在程序中开放相应的MBean
4.事件触发,通过侦听zookeeper的某个znode状态变化或订阅mq的某个主题
5.在程序中开放http服务,如通过socket或启jetty服务
第1种当然不是我们想要的,第2、3、4、5种方法都能使java应用在退出之前会触发相应的操作,做一些善后工作,以保证程序不会突然停止,而导致各种异常、数据不一致的情况。
注:
1.kill -9 pid不会触发Runtime.getRuntime().addShutdownHook(thread)
2.在开发阶段,通过eclipse直接终止程序,也不会触发Runtime.getRuntime().addShutdownHook(thread)
3.尽量不要在善后的工作中做过多的事情,以防阻塞造成程序死假
上一篇: 大数据开发人员如何写简历