如何保存/恢复Java应用程序核心内存数据现场?

本文介绍了如何在Java应用程序中利用关闭钩子保存和恢复核心内存数据现场,避免因紧急上线或异常关闭导致的数据丢失。通过序列化对象到本地文件并在应用程序启动后恢复,确保应用状态平滑过渡。同时,文章提醒了使用关闭钩子时的注意事项,如避免使用kill -9命令,以及减少钩子执行时间等。
摘要由CSDN通过智能技术生成

0. 背景

不论是单机应用还是分布式应用,总是会有些许迭代或者紧急Fix bug上线的神操作。但是如果不是那么幸运,当时还存在大量核心内存中数据在进行计算等逻辑,此时终止项目,就会出现核心数据或者状态丢失的不利情况,后续即使上线完成也要尽快追加数据。

1 那是否存在某种技巧???:在需要终止应用的时候,能够监听到终止操作,并保存核心数据现场,然后再终止应用,而后在应用恢复后,再进行核心数据恢复。
2
3 答案是肯定的。

0.1 技术储备

1 Runtime.getRuntime().addShutdownHook(Thread thread);

我们可以借助于JDK为我们所提供的上述钩子方法。这个方法的意思就是在JVM中增加一个关闭的钩子,当JVM关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,JVM才会关闭。所以这些钩子可以在JVM关闭的时候进行内存清理、对象销毁以及核心数据现场保存等操作。

1. 假设一种场景

1.1 保存现场,为应用保驾护航

我们应用程序运行中,在内存中存储着Map(用户唯一标识符和用户信息的映射关系),此时,突然需要紧急处理某个bug并打包上线。

用户映射关系已经建立好了,我们总不能因为紧急上线就让用户重新登录一次,只是为了构建这个映射关系???这样显然不是很合理,其次还有用户流失的风险,我们怎么可以去冒着被大boss怒怼这般的大风险呢,搞不好年终奖还没有,哈哈哈哈哈……

那我们换个思路,我们要解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值