如何让java程序平滑停止

前言

       在敏捷开发中,迭代周期较快,版本发布频繁,需要经常更新到生产环境。新版本发布时,需要停止旧版本的程序。在停止旧版本程序的过程,我们希望旧版本程序能平滑停止,所谓的平滑停止,是指不会产生脏数据、事务不一致、数据状态已改变却未更新到数据库、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.尽量不要在善后的工作中做过多的事情,以防阻塞造成程序死假

猜你喜欢

转载自jxauwxj.iteye.com/blog/2355303
今日推荐