在我的春季工作中,我们使用“使用Tasklets的步骤”(不是面向块的)方法。
在表BATCH_STEP_EXECUTION_CONTEXT中,有时我们已经看到status1&的status =“UNKNOWN”和exit_code =“FAILED”。步骤2
从日志中我们可以看到obervation,
"org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;
uncategorized SQLException for SQL [UPDATE BATCH_STEP_EXECUTION_CONTEXT SET
SHORT_CONTEXT = ?, SERIALIZED_CONTEXT = ? WHERE STEP_EXECUTION_ID = ?]; SQL
state [null]; error code [0]; Transaction cannot proceed STATUS_ROLLEDBACK;
nested exception is java.sql.SQLException: Transaction cannot proceed
STATUS_ROLLEDBACK
不确定我们在哪里坚持“UNKNOWN”的状态 从tasklet,我们没有看到任何问题,但为什么有些时候这种情况正在发生。是否有人遇到过这个问题并得到了解决。?
查找以下职位配置
<job id="myBatchJob" job-repository="jobRepository">
<step id="step1">
<tasklet ref="MyTasklet1">
<listeners>
<listener ref="MyTaskletListener1" />
</listeners>
<transaction-attributes propagation="REQUIRED"/>
</tasklet>
<next on="*" to="step2" />
<next on="FAILED" to="step2" />
</step>
<step id="step2">
<tasklet ref="MyTasklet2">
<listeners>
<listener ref="MyTaskletListener2" />
</listeners>
<transaction-attributes propagation="REQUIRED"/>
</tasklet>
</step>
</job>
public class MyTaskletListener1 {
@BeforeStep
void beforeStep(StepExecution stepExecution) {
LOG.info("Before step execution");
}
@AfterStep
ExitStatus afterStep(StepExecution stepExecution) {
LOG.info("After step execution");
return ExitStatus.COMPLETED;
}
}