我正在使用Quartz调度器在我的java-app中启动作业。我有作业hellojob.java
package com.stackoverflow.test.java;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
private String message;
public HelloJob() {
Date akt = new Date();
this.message = "Quartz is running (" + akt + ").";
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(this.message);
}
}
package com.stackoverflow.test.java;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.JobBuilder;
import org.quartz.CronScheduleBuilder;
public class TestQuartz {
public static void main(String[] args) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
/* ################################################################### */
JobDetail job = JobBuilder
.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
CronScheduleBuilder sb1 = CronScheduleBuilder
.cronSchedule("*/5 */3 * * * ?");
CronScheduleBuilder sb2 = CronScheduleBuilder
.cronSchedule("*/9 */2 * * * ?");
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(sb1)
.build();
Trigger trigger2 = TriggerBuilder
.newTrigger()
.withIdentity("trigger2", "group1")
.startNow()
.withSchedule(sb2)
.build();
scheduler.scheduleJob(job, trigger);
scheduler.scheduleJob(job, trigger2);
/* ################################################################### */
Thread.sleep(10 * 60 * 1000);
System.out.println("FIN");
/* ################################################################### */
scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'group1.job1', because one already exists with this identification.
at org.quartz.simpl.RAMJobStore.storeJob(RAMJobStore.java:279)
at org.quartz.simpl.RAMJobStore.storeJobAndTrigger(RAMJobStore.java:251)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
at com.stackoverflow.test.java.TestQuartz.main(TestQuartz.java:47)
用几个触发器启动一个作业是不可能的吗?我能以某种方式生成一个考虑多个cron表达式的调度吗?
必须使用TriggerBuilder
的forjob(JobKey JobKey)
方法为作业分配更多的触发器。
Trigger trigger = TriggerBuilder.newTrigger().forJob(job.getKey()). ...
scheduler.scheduleJob(trigger)
在您的情况下,应用以下修改:
/* ... */
Trigger trigger2 = TriggerBuilder
.newTrigger()
.forJob(job.getKey())
.withIdentity("trigger2", "group1")
.startNow()
.withSchedule(sb2)
.build();
/* ... */
scheduler.scheduleJob(trigger2);
/* ... */
我想知道是否有一个函数/方法来创建随机时间触发的作业。我的意思是,如果我设置一个cron计划在每周一上午10:00触发,并给出一个时间间隔,比方说30分钟,触发器将总是在9:30到10:30之间关闭。例如,这是cron调度表。
我正在使用Java中的Quartz调度程序来运行cron作业。这是我第一次使用这个框架运行cron作业,所以我有些困惑。 我跟随本教程是为了更好地理解如何使用Quartz框架。 如果JobA每周运行,那么它应该打印出和。但是如果JobA每个月都在运行,那么它应该打印出和所以下一个问题是--有没有什么方法,我们可以在运行JobA时向它传递参数?
问题内容: 计划从设置cron作业转移到Quartz Scheduler。使用Quartz而不是设置cron有什么优点/缺点? 问题答案: 我用过并且喜欢石英。这是石英的一些优点 如果使用基于OS的cron,则jvm会升降,并且任何状态都将丢失。 它是便携式的(可以在没有cron的Win OS上运行) 您可以在石英中安排多个线程 我们在tomcat中运行调度程序,因此我们可以通过管理网页来管理和查
我的路线计划每月在凌晨1:00运行一次,如果我的应用程序在这段时间内关闭,就会出现问题,所以我想在应用程序启动时运行该作业。 它使用时间段(如果服务重新启动,作业将运行),但不使用cron表达式。 我试过使用以下方法,但没有成功。 从(“quartz2://scheduler?cron=0 45 15 1 1/1?”? 有人能让我知道,如果我错过了什么。
如何使用quartz 1.6.2根据动态接收的参数和开始日期和时间调度和执行此方法。我是一个新的石英调度器,我不知道如何做这一点。有没有人帮我用你的示例程序?