对于我的应用程序,我创建作业并使用CronTriggers计划它们。每个作业只有一个触发器,并且作业名称和触发器名称都相同。没有作业共享触发器。
现在,当我创建像这样的cron触发器 “ 0/1 * * 吗?” 它指示作业每秒钟执行一次,效果很好。
当我第一次通过以下方式暂停工作时,问题就出现了:
scheduler.pauseJob(jobName, jobGroup);
然后假设50秒后恢复工作:
scheduler.resumeJob(jobName, jobGroup);
我看到的是,在这50秒钟中,作业没有按要求执行。但是当我恢复工作的那一刻,我看到同时执行了50次工作!!!
我以为这是由于不触发指令的默认设置引起的,但即使在创建触发器时将触发器的不触发指令设置为此:
trigger.setMisfireInstructhtml" target="_blank">ion(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
发生同样的事情。谁能建议解决此问题的方法?
在CronTrigger
通过记住的作品nextFireTime
。创建触发器后,将对其nextFireTime
进行初始化。每次触发作业nextFireTime
都会更新。由于暂停时未触发作业,因此nextFireTime
保持“旧”状态。因此,恢复作业后,触发器将返回每个旧的触发器时间。
问题是,触发器不知道它已被暂停。为了克服这个问题,进行了不点火处理。恢复作业后,updateAfterMisfire()
将调用触发器的方法来更正nextFireTime
。但是,如果nextFireTime
和现在之间的差小于misfireThreshold,则不是这样。这样就永远不会调用该方法。此阈值的默认值为60,000。因此,如果您的暂停时间超过60s,一切都会好起来的。
由于您有问题,我认为没有。;)要解决此问题,您可以修改阈值或在周围使用简单的包装器CronTrigger
:
public class PauseAwareCronTrigger extends CronTrigger {
// constructors you need go here
@Override
public Date getNextFireTime() {
Date nextFireTime = super.getNextFireTime();
if (nextFireTime.getTime() < System.currentTimeMillis()) {
// next fire time after now
nextFireTime = super.getFireTimeAfter(null);
super.setNextFireTime(nextFireTime);
}
return nextFireTime;
}
}
使用spring 2.5和quartz 1.6.2,我一直试图每分钟触发一个计划任务 我的xml文件是: 我的代码是:
我有这份工作: 作业应该每小时运行一次。我以为问题是cronexpression。这就是为什么我把它改成上面的表达式。在我有这个表达之前: null
我正在使用一个火花流作业,它使用带有初始RDD的mapAnd State。当重新启动应用程序并从检查点恢复时,它会失败,出错: 此RDD缺少SparkContext。它可能发生在以下情况: RDD转换和操作不是由驱动程序调用的,而是在其他转换内部调用的;例如,rdd1.map(x= 中描述了此行为https://issues.apache.org/jira/browse/SPARK-13758但它
如何将CronTimer迭代器设置为1?或者如何停止排定程序多次执行作业。 有什么建议吗?谢谢,古扬·沙阿。
公共静态空main(String[]args)抛出异常{ 最终StreamExecutionEnvironment env=StreamExecutionEnvironment。getExecutionEnvironment();环境。setRuntimeMode(RuntimeExecutionMode.BATCH); } 哪个节点执行逻辑,例如上面的ftpUri定义。 我尝试用断点将调试器附加
问题内容: 我正在测试詹金斯,看它是否适合我们的构建和测试框架。我发现Jenkins及其可用的插件可以满足我们的大多数需求。除了我似乎无法找到有关如何执行一种特定类型任务的帮助。 我们正在为嵌入式设备创建应用程序。我们需要在这些设备上运行100项测试。如果我们在构建后在一台设备上运行所有测试,那么将需要几个小时才能获得结果。但是,如果我们在100个设备上并行运行测试,则可以在更短的时间内获得结果。