应用服务器关闭后立即关闭所有石英作业?

时间:2018-01-26 02:19:37

标签: java quartz-scheduler

我有一个Web应用程序,我定期运行一些工作,所以我在这里使用quartz框架。以下是我开始所有工作的方式:

一旦服务器启动,它就会自动调用postInit方法。然后我开始所有的工作,它工作正常:

  @PostConstruct
  public void postInit() {
    logger.logInfo("Starting all jobs");
    StdSchedulerFactory factory = new StdSchedulerFactory();
    try {
      factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
      Scheduler scheduler = factory.getScheduler();
      // starts all our jobs using quartz_config.xml file
      scheduler.start();
    } catch (SchedulerException ex) {
      logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
    }
  }

  @PreDestroy
  public void shutdown() {
    logger.logInfo("Shutting down all jobs");
  }

现在,我想在尝试关闭应用服务器时立即停止所有正在运行的作业。因此,每当我们尝试关闭应用服务器时,它都会自动调用shutdown方法。现在我需要一些方法,我们可以在调用shutdown方法后立即关闭所有作业。调用shutdown方法后,我可以立即关闭所有作业的最佳方法是什么?

下面是我的“quartz.properties”文件。我真的需要“quartz.properties”文件,因为我想我还在使用默认值吗?

#------------------------- Threads ---------------------------------#
# how many jobs we should run at the same time?
org.quartz.threadPool.threadCount=15

# ----------------------------- Plugins --------------------------- #
# class from where we should load the configuration data for each job and trigger.
org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

1 个答案:

答案 0 :(得分:2)

您可以使用下面的Scheduler.shutdown()方法,即使您使用默认参数,也最好外部化石英配置。这将使您的代码变得灵活。

  private Scheduler scheduler;

  @PostConstruct
  public void postInit() {
    logger.logInfo("Starting all jobs");
    StdSchedulerFactory factory = new StdSchedulerFactory();
    try {
      factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
      scheduler = factory.getScheduler();
      // starts all our jobs using quartz_config.xml file
      scheduler.start();
    } catch (SchedulerException ex) {
      logger.logError("error while starting scheduler= ", ExceptionUtils.getStackTrace(ex));
    }
  }

  @PreDestroy
  public void shutdown() throws SchedulerException {
    logger.logInfo("Shutting down all jobs");
    scheduler.shutdown();
  }