2012-11-18 37 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