当前位置: 首页 > 知识库问答 >
问题:

具有指数增长延迟时间的石英重试工作触发策略

汝跃
2023-03-14

我在Spring项目中使用石英。这个想法是为新的收入数据创建单独的工作,这些数据没有成功地交付给目标服务。

  • 为了以指数增长的策略交付数据,我还为下一次失败的尝试创建了工作。(它发送垃圾邮件DB。它似乎有效,但可以更好。)
  • 不同我的解决方案是创建可重复的基于crone的作业,该作业扫描DB数据并加载数据,因为时间已经过去了(在这种情况下,我必须管理大量java部分)。
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]
  • 如何通过quartz作业触发器更新来管理(如果处理不成功-更新触发时间不同的触发器)?
  • 如何通过quartz作业更新进行管理(如果处理不成功-使用新触发器更新作业)?
  • 如何注册触发器的指数增长延迟时间策略?

共有1个答案

翟迪
2023-03-14
  • 您可以遵循这种方法(重试机制,并且可以允许no.of重试)引用:失败时Quartz重试
  • 对于每次失败,您可以更新计数器并发送电子邮件。所以你会知道在最大尝试也是成功通过或没有。
  • 如果不是以后,您将有一个仪表板来查看失败(包括尝试的次数),并可以手动运行它。
  • 而不是e.setrefire,您可以立即设置时间线ex。120分钟后,根据JobDataMap机制安排运行它
 类似资料:
  • 和日志: 我在01.11.2013T23:19:26.000的作业,每隔2秒 我在01.11.2013T23:19:27.000的作业,每3秒 我在01.11.2013T23:19:28.000的作业,每隔2秒 我的工作时间01.11.2013t23:19:0.000,每隔2秒 我在01.11.2013t23:19:30.001的作业,每3秒 我的作业在01.11.2013T23:19:32.00

  • 我如何暂停我的石英触发器,并在第二天在其指定的开始时间开始它?为(如)。我的cron表达式是*0/20 15-00**?所以当我暂停扳机时,它应该在第二天15:00开始。

  • 我有一个Sprint Boot-Java8应用程序,它有一个quartz作业,我在启动时配置该作业并设置一个时间表。该作业按照计划自动运行,这与您对quartz作业的期望一样。然而,现在我希望能够允许用户通过点击前端上的一个按钮手动触发这些作业,而不会扰乱该作业的正常调度。这是我所有的相关档案。 但每次运行应用程序并点击控制器的方法时,都会在控制台中出现以下错误: 我到底做错了什么?如何使此作业按

  • 问题内容: 假设我以这种方式配置了一个触发器: 触发器必须与另一个应用程序连接,并且如果存在任何问题(例如连接失败),则触发器应每10分钟重试任务五次,直到成功为止。有什么方法可以配置触发器使其工作? 问题答案: 来源 :自动重试Quartz中失败的作业 如果您想要一项不断尝试直到成功的工作,您要做的就是抛出一个带有标志的JobExecutionException,以通知调度程序在失败时再次触发它

  • 问题内容: 我想展示如何使用进行合并排序。我想做的是在一段时间后使可见。我尝试了很多方法,但是所有这些都同时出现,没有中间延迟。 但是,当我单击按钮时,所有标签都出现在相同的momenet上,尽管我一直保持延迟。 问题答案: 有很多原因导致此方法无法正常工作。首先,这种方式行不通。它在后台等待,直到给定的延迟过去,然后调用注册的s 方法。 其次,如果它确实以这种方式工作,它将阻止事件调度线程,从而

  • 我正在使用Quartz和Spring来安排工作。我有一份按计划每小时运行的工作。问题是,当计划的作业耗时超过一小时时,该作业的“下一次启动时间”仍然是旧时间,不会启动(因为启动时间已经过去)。 我的问题是,如果工作时间超过预定时间,我们如何更改“下一次点火时间”?