如何在Java中使用Quartz调度程序框架运行cron作业?

如何在Java中使用Quartz调度程序框架运行cron作业?,java,cron,quartz-scheduler,Java,Cron,Quartz Scheduler,我使用Java中的Quartz调度器来运行cron作业。这是我第一次使用这个框架来运行cron作业,所以我感到有些困惑 我遵循这一点是为了更好地理解如何使用Quartz框架 我试图每周和每月运行JobA,所以我从基本示例开始- 这是我迄今为止得到的例子 public class JobA implements Job { @Override public void execute(JobExecutionContext context) throws J

我使用Java中的Quartz调度器来运行cron作业。这是我第一次使用这个框架来运行cron作业,所以我感到有些困惑

我遵循这一点是为了更好地理解如何使用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
    }
}
下面是我的crontriggere示例,它安排作业运行

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每周运行一次,那么它应该打印出
1周
report\u周
。但是,如果JobA每月运行一次,那么它应该打印出
一个月
报告一个月
,因此下一个问题是-有没有办法,我们可以在尝试运行JobA时将参数传递给JobA?

quartz中cron的7个字段的含义:

second minute hour day month week year
year
字段是可选的
*
表示每,例如,
字段中的
*
表示每周,因此您应该在
字段和
字段中使用
*
。注 当指定了
字段时,不要忘记在
字段中使用

我的示例cron条目适用于您的需求:

0 0 0 ? * *
这意味着每周和每月00:00:00运行作业,请根据需要进行调整

有关详细信息,请参阅:


我希望有帮助

注意:要编写自己的Cron表达式,请查看您可以使用
JobDataMap
参数化
Job
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