Java Servlets:运行后台任务的"最佳实践"?

sbr*_*tla 5 java servlets background-process

我正在开发一个Web应用程序,它需要立即清除过期的缓存元素.我想使用Quartz框架执行此操作,并有一个单独的工作来参与此操作.

现在,我在其他项目中使用了Quartz,并且通常使用contextInitialised(ServletContextEvent sce)和contextDestroyed(ServletContextEvent sce)从ServletContextListener安排所有作业.但是,我这样做了,因为我曾经读过的教程是这样做的.

我不确定我是否可以从servlet的init()和destroy()方法中安排任务?我想有人可能会说我现在正在混合后台任务和servlet,从而有责任,但是我想听听是否有"最佳实践"?

alf*_*alf 3

首先,通常的免责声明:您不应该弄乱 Servlet 容器中的线程。所以从定义上来说,所有的方法都是错误的(我怀疑正确的方法是curl从调用crontab)。

\n\n

ServletContextListener是目前的首选方法;当Servlet不存在时,它init()是一个不错的方法。ServletContextListener不过,servlet 存在不同的问题:首先,它可能不会在启动时初始化(通过load-on-startup参数解决);它可以被卸载,只是因为包含的 servlet 决定这样做(在实践中从未见过\xe2\x80\x94,但规范说可以)。

\n\n

但最重要的是,它是一个技巧\xe2\x80\x94,并且与任何其他技巧一样,它对读者来说没有什么意义,除非你仔细记录它,或者他事先就知道这是一个技巧。因此,如果有疑问,请避免。

\n