我有两个步骤的组合任务myFailedTask
,其中一个配置为一直失败:
<mf1: sampleTask --fail=true --custom-argument=m || sampleTask>
首次运行时,作业将以run.id
等于 1 运行,并且mf1
报告为失败。
下次运行点击率时,作业会在run.id
等于 1 的情况下再次运行,并跳过sampleTask
步骤:
2017-11-29 15:30:30.146 INFO 11604 --- [ taskExecutor-2] o.s.batch.core.job.SimpleStepHandler : Step already complete or not restartable, so no action to execute: StepExecution: id=97, version=3, name=myFailedTask-sampleTask_0, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
我正在使用部署在以下属性文件中的httpclient
转换器执行CTR:
app.httpclient.body-expression='name='+new com.fasterxml.jackson.databind.ObjectMapper().readTree(payload).findValue('taskName').asText()+ \
'&arguments=\
--increment-instance-enabled=true \
--split-thread-core-pool-size=10 \
--interval-time-between-checks=5000 \
--composed-task-arguments=--message='+new String(T(java.util.Base64).getEncoder().encode(payload.getBytes()))
app.httpclient.http-method=POST
app.httpclient.url=http://localhost:9393/tasks/executions
app.httpclient.headers-expression={'Content-Type':'application/x-www-form-urlencoded'}
我还通过CTR调用之间的不同有效负载更改--composed-task-arguments
- 效果相同。
所以,我的问题是如何强制点击率来运行新作业,而不是从失败的步骤中继续执行先前失败的作业。
更新
好的,挖掘春天来源,JobLauncherCommandLineRunner::getNextJobParameters
下面的代码解释了行为:
if (isStoppedOrFailed(previousExecution) && job.isRestartable()) {
// Retry a failed or stopped execution
parameters = previousExecution.getJobParameters();
// Non-identifying additional parameters can be removed to a retry
removeNonIdentifying(additionals);
}
else if (incrementer != null) {
// New instance so increment the parameters if we can
parameters = incrementer.getNext(previousExecution.getJobParameters());
}
所以我在重述原来的问题:“如何将restartable
属性传递给CTR?