【发布时间】:2012-11-18 03:24:30
【问题描述】:
我已经看到了很多关于这个主题的答案,但仍然找不到一个干净的解决方案。
public class ProcessScheduler {
static {
Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
LogProcessorServiceImpl.processPageRequestsLogs();
}
}, 0, 120);
}
}
如何执行此操作并对高质量的解决方案感到满意?我的应用程序基于 Spring(不幸的是),我知道我可以在我的一个控制器中引用这个类,它可能会工作。但这很愚蠢。必须有更好的方法。我在没有 EJB 支持的 Tomcat 上,所以计时器注释对我不起作用。另外,我不想做 CRON。我想在这个调度程序类中安排我的所有维护任务。
Servlet 类可以通过 web.xml (1) 加载。我们可以在非 servlet 类上做类似的事情吗?
【问题讨论】:
-
静态块在类加载时执行。它将在加载时执行,如果您不想要,可能需要执行方法和调用之类的操作,这就是您想要的。
-
方法调用仍需要在其他地方引用此类。这同样肮脏。这个调度器应该是完全自治的。
-
@jacekn,为什么你的应用程序在春季运行很不幸? Spring 提供了健壮的调度
-
至少你应该在你的程序的某个地方加载这个类来让静态块运行。有没有一种方法可以在你的环境中自动加载这个类?