gpt4 book ai didi

java - 发生 Tomcat 关闭时如何进行最终的数据库推送?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:39 26 4
gpt4 key购买 nike

我有这个 Web 应用程序,它缓冲内容,然后将所述内容批量插入到数据库中。现在,我希望能够在 Tomcat 关闭事件发生时进行最后的批量插入,这样我就不会丢失我的东西。

我的应用是一个非常简单的 Guice+Jersey API。

我已经尝试覆盖 GuiceServletContextListenercontextDestroy 但它最终出现在 NPE 中,因为我注入(inject)的依赖项似乎在此时已被 GC。

最佳答案

只有当对某个实例的硬引用为零时,GC 才能收集资源。我认为 GuiceServletContextListener 仍然是您最好的选择。此时 Tomcat 正在尝试清理资源,然后再尝试让 GC 回收您的应用程序在其中运行的 ClassLoader。只要您有硬引用,您需要的一切都应该仍然可用。

当您创建您的Injector 时,保留对Provider 的引用,该引用返回一个执行您的清理的类。当调用 contextDestroyed 时,从提供程序获取清理类的实例并运行逻辑。

设置

  1. 编写一个清理类,包含所有需要的依赖项。
  2. 将此清理类绑定(bind)到 guice。
  3. 当您创建 Injector 时,在您的 GuiceServletContextListener 中保留返回清理类的提供程序的实例(不要保留 Injector 的实例。它包含整个依赖关系树)。
  4. 当调用 contextDestroyed 方法时,使用提供程序获取清理类的实例并运行逻辑。

关于java - 发生 Tomcat 关闭时如何进行最终的数据库推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995497/

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