Java 我应该在Servlet';s destroy()方法?

Java 我应该在Servlet';s destroy()方法?,java,servlets,quartz-scheduler,Java,Servlets,Quartz Scheduler,有一个启动servlet,它在init()方法中初始化Quartz调度程序,并在destroy()方法中关闭调度程序。我知道Servlet本身是一个对象,将以未知的间隔被GC收集。如果在destroy()方法中关闭Quartz调度程序,我希望每次收集servlet时都重新启动调度程序。如果销毁和启动过程跳过了我期望quartz运行线程的确切时间,我可能会遇到问题。我的假设正确吗 注意:我注意到quartz库中有一个上下文侦听器,在应用程序停止服务时关闭quartz。Servlet规范允许容器在任

有一个启动servlet,它在init()方法中初始化Quartz调度程序,并在destroy()方法中关闭调度程序。我知道Servlet本身是一个对象,将以未知的间隔被GC收集。如果在destroy()方法中关闭Quartz调度程序,我希望每次收集servlet时都重新启动调度程序。如果销毁和启动过程跳过了我期望quartz运行线程的确切时间,我可能会遇到问题。我的假设正确吗


注意:我注意到quartz库中有一个上下文侦听器,在应用程序停止服务时关闭quartz。

Servlet规范允许容器在任何时候卸载Servlet,尽管它们不必这样做(例如Tomcat不需要)。您不太可能遇到问题,但是如果Quartz由启动它的Servlet以外的组件使用,那么它实际上属于应用程序而不是Servlet,应该在该级别进行配置


通常,使用ServletContextListener启动和停止Quartz比使用Servlet更好。

谢谢您的回复。虽然tomcat不卸载/加载servlet,但是GC会重新收集它吗?根据GC行为,如果决定重新调用servlet,它将重新调用servlet,特别是如果像我这样的servlet在启动初始化后没有保留任何进程。我关心的是quartz是否会在GC重新收集该servlet时重新启动,因为如果GC决定重新收集该servlet,则会调用destroy()。Tomcat持有对该servlet的引用,因此除非Tomcat释放它(直到应用程序卸载后才会释放),否则它不能被GC删除。