【发布时间】:2019-03-16 13:24:56
【问题描述】:
我在春季项目中使用石英。这个想法是为新的收入数据创建单独的工作,这些数据没有成功交付给目标服务。
- 为了以指数级增长的策略提供数据,我还为下一次不成功的尝试创建了工作。 (它会向 DB 发送垃圾邮件。它似乎有效,但可能会更好。)
- 不同的是,我的解决方案是创建可重复的基于 crone 的作业,该作业扫描 DB 数据并仅加载日期,因为时间过去了(在这种情况下,我必须在 java 部分进行大量管理)。
两种方式都可以提供正确的流程,但我更喜欢开箱即用的解决方案。
我试图管理触发作业的JobExecutionContext 以使用相同的JobDetail 在quartzScheduler 中注册它。这个想法是用不同的触发器更新现有的工作。但问题是,quartz 试图创建新的工作,将其持久保存在数据库中。
org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'digex-caas-securepay.b333e5bf-583f-4643-9ad7-ef4b913001f7', because one already exists with this identification.
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1113) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1067) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3765) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3763) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:245) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1063) ~[quartz-2.3.0.jar:na]
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:855) ~[quartz-2.3.0.jar:na]
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249) ~[quartz-2.3.0.jar:na]
at com.incomm.ecomm.services.quartz.OrderQuartzJobScheduler.registerSecurePayPostServiceJob(OrderQuartzJobScheduler.java:59) ~[classes/:na]
问题是(请回答任何问题):
- 如何通过石英作业触发器更新进行管理(如果未成功处理 - 使用不同触发时间更新触发器)?
- 如何通过石英作业更新进行管理(如果未成功处理 - 使用新触发器更新作业)?
- 如何为触发器注册指数增加的延迟时间策略?
【问题讨论】:
标签: java quartz-scheduler quartz