2012-11-18 17 views
0

我在这个主题上看到了很多答案,但仍找不到一个干净的解决方案。如何使静态块运行?

public class ProcessScheduler { 
    static { 
     Timer timer=new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 
       LogProcessorServiceImpl.processPageRequestsLogs(); 
      } 
     }, 0, 120); 
    } 
} 

如何让这个执行并对质量解决方案感到满意?我的应用程序基于Spring(不幸),我知道我可以在我的一个控制器中引用这个类,它可能会工作。但这很愚蠢。必须有更好的方法。我在Tomcat上没有EJB支持,所以定时器注释不适用于我。另外,我不想做CRON。我想在此调度程序类中安排我所有的维护任务。

Servlet类可以通过web.xml(1)加载。我们可以在非servlet类上做类似的事吗?

+2

静块上执行类的负载。它会在加载时执行,如果你不想要,你可能需要做一些类似于方法和调用的事情,那就是你想要的。 – kosa

+0

方法调用仍然需要在其他地方引用此类。这同样很脏。这个调度程序应该是完全自治的。 – jacekn

+2

@jacekn,为什么你的应用在春季运行不幸? Spring提供稳健的调度 – kolossus

回答

5

代替在静态块写本,我宁愿

+0

那么,我打算为此使用一个简单的servlet,但我正在尝试你的听众。该servlet实现ServletContextListener并加载。但contextInitialized()方法不运行。我想我需要阅读这个,除非你能更快地解释。 – jacekn

+0

您是否将类添加为web.xml中的侦听器?我刚刚更新了我的答案和潜在的条目。 – Vikdor

+0

是的,我确实为web.xml添加了侦听器定义,并且服务器也重新启动了。当我切换到一个简单的servlet时,它工作的很好,所以我会放弃它。对我来说,这是几乎相同的解决方案,所以我接受你的答案。谢谢。 – jacekn