我正在尝试取消我在 Quartz 中创建的特定作业的触发器。我有一个电子邮件作业,它有一个关联的触发器,计划在两个小时后运行。jobGroup
和jobName
可供我使用。jobName
/jobId
是"28d5f25e-0669-4570-bdb2-b4e865fcdc02",而jobGroup
是"电子邮件作业"。触发键似乎也是正确的。
String jobName = cancelEmailScheheduleRequest.get("jobName"); //correct
String jobGroup = cancelEmailScheheduleRequest.get("jobGroup"); //correct jobGroup
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); // returns object {name: "4dc25e67-10fa-4e2b-8ca0-c91c024a9a05", group: "email-jobs"}
Map<String, String> response = new HashMap<>();
try {
if (scheduler.checkExists(triggerKey)) { //returns false instead of true
scheduler.unscheduleJob(triggerKey);
response.put("message", "Email Unscheduled");
return ResponseEntity.ok(response);
} else {
response.put("message", "No such Email to Unschedule");
return ResponseEntity.ok(response);
}
} catch (SchedulerException e) {
e.printStackTrace();
response.put("message", "Some Error occurred");
return ResponseEntity.ok(response);
}
但是scheduler.checkExists(triggerKey)
行返回FALSE
,而它应该返回 true,因此我的触发器不会计划外。因此,执行 else 条件并No such Email to Unschedule
返回的消息。
当您输入作业名称和作业组以获取触发键时,scheduler.checkExists(triggerKey)
将返回 false。您需要使用触发器名称和触发器组来获取触发器密钥。