Java应用对象关闭注意事项

本文探讨在Java应用中如何通过调整Spring配置确保正确关闭顺序,避免生产者在关闭时影响使用者,重点关注依赖关系管理、Springbean销毁顺序和优雅关闭策略的优化。

1 背景介绍

在Java应用中,日常我们关闭一个对象实例,通常采用优雅关闭的形式,当JVM退出时会调用注册的回调钩子方法来关闭对象实例,来实现资源回收。例如消息服务等。

但这种方式在复杂业务场景下可能因业务顺序导致问题。以消息服务为例,JVM执行关闭时,使用生产者对象发送消息的对象可能还在发送消息。但此时生产者对象却进行了关闭。 这导致在一定时间内一个使用者使用了关闭的对象,从而出现错误。

处理这类问题,主要搞清楚对象间的关系。 先关闭使用者、再关闭功能提供者。 从下面的依赖关系图看,就是从叶子开始向根执行关闭。

在这里插入图片描述

2 注意事项

  • Java应用中通常都会使用Spring来管理Bean。Spring bean的销毁顺序默认是后加载的bean先销毁,所以期望关闭的顺序,调整配置顺序,从而可以保证使用者最先被关闭,服务提供者最后被关闭。

  • 关闭服务提供者的shutdown hook,这样避免优雅关闭服务时(发送信号量关闭),服务提供者被提前关闭,导致短时间内使用服务的对象大量报错。

  • 关闭服务时,发送关闭信号,切断流量,等待一定时间,最后强制停止服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值