У меня есть задание Quartz, которое будет перезапущено при определенных условиях. Если я использую storeDurably (), как показано ниже, то при втором запуске я получу исключение, также показанное ниже. Я понял, что не совсем понимаю, при каких условиях мне следует использовать .storeDurably (). Когда мне следует использовать .storeDurably ()? Насколько я понимаю, когда я планирую свою работу, она будет сохранена в БД, так что она будет «сохранена на длительный срок», но затем будет удалена, когда нет Триггеры указывают на это. Если я использую .storeDurably (), должен ли я также искать экземпляр сохраненного JobDetail, прежде чем пытаться создать новый?
Мой JobBuilder:
private JobDetail buildAmzGetOrderDetailsJobDetail(String purchaseOrderNumber) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("purchaseOrderNumber", purchaseOrderNumber);
return JobBuilder.newJob(AmzGetOrderDetailsJob.class)
.withIdentity(purchaseOrderNumber, "amz-get-order-details-jobs") //
.withDescription("Amz Get Order Details Job") //
.usingJobData(jobDataMap) //
.storeDurably() //
.build();
}
Исключение при повторном запуске:
org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'amz-get-order-details-jobs.Utde8512B', because one already exists with this identification.
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1113)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1067)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3780)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3778)
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:245)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1063)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:855)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
at io.paat.factory.quartz.job.AmzGetOrderDetails.scheduleJob(AmzGetOrderDetails.java:42)
at io.paat.factory.quartz.job.AmzCheckOrdersJob.execute(AmzCheckOrdersJob.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)