SQL的未分类SQLException [UPDATE BATCH_STEP_EXECUTION_CONTEXT

时间:2016-10-22 15:56:47

标签: spring spring-batch

在我的春季工作中,我们使用“使用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;
    }
}

0 个答案:

没有答案