我正在使用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));
}