3

我有一个普通的 .java 类。在该课程中,我使用Timer课程安排方法来安排任务。

问题是我正在使用 Java EE 应用程序,但我不知道在哪里实例化这个类;来自 Servlet 或类似的东西?当我的应用程序启动时,我只想实例化该类一次。

4

3 回答 3

4

你可能需要一个ServletContextListener和它的方法contextInitialized(..)。它在您的应用程序初始化时被调用一次。

您在 web.xml 中使用@WebListener或使用映射侦听器<listener><listener-class>..</...>

于 2012-04-23T20:24:08.510 回答
1
 public class YourServlet extends HttpServlet {
 private YourClass instance;

 public void init() throws ServletException {
      instance = new YourClass();
 }
 //code
 }

通过在 init 方法中实例化您的类,您将确保您的类只被实例化一次,因为在 Java EE 应用程序中,Servlet 仅被加载到服务器内存中一次。

于 2012-04-23T20:32:31.167 回答
0

在 Quartz(一种流行的调度程序)中,一种常见的做法是在 Servlet 的 init 方法中配置作业,并将 load-on-startup 属性设置为 true:

这篇文章,在 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

于 2012-04-23T20:56:06.793 回答