我在Java中使用Quartz Scheduler来运行cron作业。这是我第一次使用这个框架来运行cron作业,所以我有些困惑。
我正在关注此tutorial以更好地理解如何使用Quartz框架。
我试图每周和每个月都运行JobA
,所以我从基本的例子开始 -
这是我到目前为止的例子。
public class JobA implements Job {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Job A is runing");
// print whether it is week or month
}
}
下面是我的CronTriggerExample,它安排作业运行
public class CronTriggerExample {
public static void main(String[] args) throws Exception {
JobKey jobKeyA = new JobKey("jobA", "group1");
JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA)
.build();
Trigger trigger1 = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("5 8 * * 6 ?"))
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobA, trigger1);
}
}
问题陈述: -
我不确定如何使用上述代码每周和每月运行JobA。在我的案例中,一周和一个月的cron标签条目是什么?我不想在晚上8点到凌晨5点之间运行任何工作,任何随机日都可以。
如果JobA每周都在运行,那么它应打印出one-week
和report_week
。但是如果JobA每个月都在运行,那么它应打印出one-month
和report_one_month
,以便下一个问题是 - 有没有办法,我们可以在尝试运行时将参数传递给JobA?
答案 0 :(得分:3)
石英中7个cron字段的含义:
second minute hour day month week year
year
字段是可选的。 *
表示每个*
字段中的week
表示每周都有,因此您应在*
字段和week
中使用month
领域。注意
指定week
字段时,请不要忘记在?
字段中使用day
。
我的示例cron条目是您的要求:
0 0 0 ? * *
表示每周和每月00:00:00运行作业,请根据需要进行调整。
有关详细信息,请参阅:CronTrigger。
我希望它有所帮助。
答案 1 :(得分:0)
You can pass JobData if required
JobBuilder.newJob(JobClass.class);
jobDetail = jobBuilder.usingJobData("Key", "VALUE")
.withIdentity(dbname.getSchemaName(), "group1").build();
However for your case you need to modify cron expression provided in your cronschedular
http://www.cronmaker.com/
Follow above link to build cron expression