gpt4 book ai didi

spring - @PreDestroy 未在 tomcat 关闭时调用 session 范围的 Spring bean

转载 作者:行者123 更新时间:2023-11-28 21:47:05 24 4
gpt4 key购买 nike

使用 Spring 3.0.5 正式版

使用@PreDestroy 方法拥有一个 session 范围的bean。刚刚注意到,如果拥有 HttpSession 超时(即超过 Servlet 容器的 session 超时值),则会发出 @PreDestroy 回调。但是,如果我只是关闭应用程序服务器,则不会调用@PreDestroy。这是设计使然还是错误?如果是后者,有什么解决方法的建议吗?

FWIW,在这两种情况下都会调用单例 bean 上的@PreDestroy。

谢谢,-尼基塔

附言。有一个可能相关的 Spring bug - SPR-7359

最佳答案

很有趣。 session 范围的 bean 在 session 关闭事件发生时调用它们的 @Predestroy。如果容器从不发送该事件,则不会通知 Spring。我不确定这是否构成错误,如果是,则它是 Spring 或 Tomcat 中的错误。后者似乎更有可能,但我不知道 Servlet 容器是否有义务这样做。

如果这对您来说是一个阻碍,您可能需要考虑让作用域 bean 在其 @PostConstruct 期间向“注册器”单例注册自己,并在 @ 上注销自己预销毁。如果注册器关闭,它可以将该事件传播到仍然向其注册的任何剩余的 session 范围的 bean。

不理想,但实用的解决方案。

关于spring - @PreDestroy 未在 tomcat 关闭时调用 session 范围的 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com