我有一個普通的.java類。在該課程中,我使用Timer
課程計劃方法來安排任務。在哪裏實例化類
問題是我正在使用Java EE應用程序,我不知道該怎麼樣化這個類;從一個Servlet或類似的東西?我想只在應用程序啓動時實例化該類。
我有一個普通的.java類。在該課程中,我使用Timer
課程計劃方法來安排任務。在哪裏實例化類
問題是我正在使用Java EE應用程序,我不知道該怎麼樣化這個類;從一個Servlet或類似的東西?我想只在應用程序啓動時實例化該類。
您可能需要一個ServletContextListener
及其方法contextInitialized(..)
。它被調用一次,當你的應用程序被初始化。
您有任何@WebListener
或<listener><listener-class>..</...>
在web.xml
我完全沒有意識到這一點,你可以通過一個例子來解釋它。 – user1305398 2012-04-23 20:25:26
我添加了一個鏈接和一個段落。你只需要實現接口,在方法中做你需要做的事情,然後以建議的 – Bozho 2012-04-23 20:26:02
的方式映射類,但是我有一個問題。現在這個接口將由一個servlet實現,我明白了。但是,如果我再次調用servlet,當應用程序啓動時,它會工作嗎? – user1305398 2012-04-23 20:34:21
public class YourServlet extends HttpServlet {
private YourClass instance;
public void init() throws ServletException {
instance = new YourClass();
}
//code
}
映射聽衆通過在init()方法實例化你的類,您將確保您的類將在Java中唯一一次實例化,因爲EE應用程序中,Servlet僅被加載到服務器內存一次。
,無論我調用這個servlet多少次,但是這個對象只會創建一次,除非和直到我將應用程序關閉爲止。 – user1305398 2012-04-23 20:52:15
對,直到應用程序重新啓動後,對象纔會創建一次。 – Hidalgo 2012-04-23 21:14:22
+1,這是另一個選項,即每個servlet,而不是每個應用程序,就像在我的答案中一樣。也是可行的,取決於用例 – Bozho 2012-04-23 21:31:02
石英-a流行scheduler-是一種常見的做法與時加載的啓動屬性設置爲true一個Servlet的init方法來配置工作:
從this article,在web.xml中你應該這樣做:
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<display-name>Quartz Initializer Servlet</display-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
然後在你的servlet conigure喬布斯:
public class QuartzServlet extends GenericServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
// And continue with your configuration
PS:我強烈建議更換你使用Quartz
順便說一句,而不是'Timer',你可能想使用['ScheduledExecutorService'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService的.html)。 – 2014-02-23 11:20:50