java - 应用程序服务器关闭后立即关闭所有 quartz 作业?

标签 java quartz-scheduler

我有一个网络应用程序,我在其中定期运行一些作业,因此我在这里使用 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

最佳答案

您可以使用如下的 Scheduler.shutdown() 方法,即使您使用默认参数,外部化 quartz 配置也是一个好主意。这将使您的代码变得灵活。

  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();
  }

关于java - 应用程序服务器关闭后立即关闭所有 quartz 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48454924/

相关文章:

java - 如何将文件放入GitLab测试而不将文件添加到Src

java - 如何检查线程内主线程的变量?

Grails 和 quartz : Bad value for type long

java - NoClassDefFoundError : org/springframework/aop/framework/AbstractAdvisingBeanPostProcessor

java - Quartz Cron 表达式用于从给定时间开始每 5 小时运行一次作业

Java OpenCV - 使用霍夫变换进行矩形检测

java - WEB-INF 在 Java EE Web 应用程序中有何用途?

java - Android:将位图保存到手机存储

java - 如何为 org.quartz.JobDetail 创建自定义编辑器?

mysql - Quartz 下一次触发时间到 MySQL 中人类可读的时间