2014-02-25 57 views
0

我在tomcat下使用cron4j。
我開始一個servlet我該如何防止cron任務多次調度

doGet(){ 
    ... 
    S.start(); 
    ... 
} 

我如何將防止在啓動此定期任務不止一次,即使我再打電話給意外這個servlet的內部調度?

+1

不要在doGet()中執行代碼。在servlet的init()方法或其他一些代碼路徑中只執行一次(例如spring startup) –

+0

ok,所以servlet的構造函數僅在我啓動tomcat時運行,或者第一次調用servlet時運行?然後在tomcat重新啓動之前不會被調用。 –

+1

看我的編輯。可能最好使用Servlet.init()方法。或者你可以使用[ServletContextListener](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html)。如果你使用spring,最好在ApplicationContext中配置它。 –

回答

0

如前所述,對於一次性初始化代碼,最好使用ServletContextListenerServlet.init()方法。但是,如果您想要一個答案,如何從doGet()只做一次,然後在servlet中聲明和實例變量int counter=0。在第一次調用doGet()時增加counter=1。檢查計數器值,如果> 0,則不要再次初始化。您可以使用同步塊來增加值或將其聲明爲volatile,以使其更具花哨。