立即使用石英框架开始工作?

时间:2018-01-31 07:36:22

标签: java quartz-scheduler scheduledexecutorservice

我正在使用quartz framework定期运行一些作业。我有一个quartz_config xml文件,其中包含我正在运行的所有作业以及间隔时间。

<job-scheduling-data
    xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd"
    version="1.8">

    <schedule>
        <job>
            <name>ParserApp</name>
            <job-class>com.process.task.ParserApp</job-class>
        </job>
        <trigger>
            <cron>
                <name>ParserApp</name>
                <job-name>ParserApp</job-name>
                <cron-expression>0 0 0/3 1/1 * ? *</cron-expression>
            </cron>
        </trigger>
    </schedule>

</job-scheduling-data>

我每3小时运行ParserApp个工作。现在我注意到的是 - 每当我启动我的应用程序时,它都不会立即启动ParserApp工作。它的作用是,它只在3小时之后开始ParserApp个工作,根据cron表达式是好的。有没有什么方法可以在应用程序启动时立即启动ParserApp作业,然后下一次运行应该在3小时之后发生,就像java ScheduledExecutorService一样?

在下面的代码中,只要您启动executorService,它就会立即致电parserApp,然后定期在3小时后再次致电parserApp。有没有办法用quartz-scheduler做同样的事情?

executorService.scheduleAtFixedRate(new Runnable() {
  @Override
  public void run() {
    parserApp();
  }
}, 0, 3, TimeUnit.HOURS);

以下是我使用quartz scheduler启动所有作业的方法:

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

0 个答案:

没有答案