gpt4 book ai didi

java - Quartz为已经存在的作业添加触发器

转载 作者:行者123 更新时间:2023-12-02 10:01:30 25 4
gpt4 key购买 nike

我正在使用quartz框架来添加和安排作业和触发器。要求是为数据库中已有的作业动态添加触发器。当我尝试使用下面的代码实现此目的时,我收到 org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'EBP1.AAA',因为已经存在具有此标识的作业。带有 JobGroup EBP1 的作业 AAA 已进入数据库。我只想为同一份工作添加新的触发器。请帮助如何实现这一目标。

String jobName = "AAA";
jobTrigger = jobName + "Trigger"+ (int )(Math.random() * 50 + 1);
String jobGroup = "EBP1";

JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(jobTrigger, jobGroup).storeDurably()
.build();
if (scheduler.checkExists(JobKey.jobKey(jobName, jobGroup))) {
System.out.println("Job exist");
} else {
System.out.println("New job");
scheduler.addJob(jobDetail, true);
}

CronTrigger trigger1 = (CronTrigger)(newTrigger().withIdentity(jobTrigger, jobGroup).withDescription("default description").forJob(jobDetail)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).startAt(futureDate(500, IntervalUnit.MILLISECOND)).build());

scheduler.scheduleJob(jobDetail, trigger1);

最佳答案

快速提问:示例代码与您收到异常的代码完全相同吗?
或者示例代码可能不完整,您需要更新它。

无论如何,我认为您当前的示例代码存在错误:
- 您使用触发器的身份创建“jobDetail”,而不是“jobName” - withIdentity(jobTrigger, jobGroup)

要向现有作业添加新触发器,请执行以下操作:

JobKey myJobKey = new JobKey(jobName, jobGroup);

CronTrigger trigger1 = (CronTrigger)(newTrigger().withIdentity(jobTrigger, jobGroup)
.withDescription("default description").forJob(myJobKey)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.startAt(futureDate(500, IntervalUnit.MILLISECOND))
.build());

scheduler.scheduleJob(trigger1);

2 参数方法 scheduler.scheduleJob(JobDetail, Trigger) 的 JavaDoc 明确指出,
它将尝试根据提供的 JobDetail 创建作业
- 所以你得到 ObjectAlreadyExistsException 的原因是有道理的

关于java - Quartz为已经存在的作业添加触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55586190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com