我有一个简单的.java类。在该课程中,我使用Timer
课程计划方法来安排任务。
问题是我正在使用Java EE应用程序,我不知道在哪里实例化这个类;从Servlet或类似的东西?我想在我的应用程序启动时只实例化一次该类。
答案 0 :(得分:4)
您可能需要ServletContextListener
及其方法contextInitialized(..)
。初始化应用程序时,它会被调用一次。
您可以在web.xml
中使用@WebListener
或<listener><listener-class>..</...>
映射侦听器
答案 1 :(得分:1)
public class YourServlet extends HttpServlet {
private YourClass instance;
public void init() throws ServletException {
instance = new YourClass();
}
//code
}
通过在init方法中实例化您的类,您将确保您的类只被实例化一次,因为在Java EE应用程序中,Servlet只被加载到服务器内存中一次。
答案 2 :(得分:0)
在Quartz中 - 一种流行的调度程序 - 通常的做法是在Servlet的init方法中配置Jobs,并将load-on-startup属性设置为true:
从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中配置Jobs:
public class QuartzServlet extends GenericServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
// And continue with your configuration
PS:我强烈建议您使用Quartz