Spring 批量重试 - Spring 从中断处开始还是从头开始
Spring Batch Retry - does Spring start where it left off or start from beginning
以下是我重试的配置:
<batch:job id="myLookUpLoadJob">
<batch:step id="myLookUpTruncateStep">
<batch:tasklet ref="myLookupTruncateTasklet" />
<batch:next on="*" to="myLookUpLoadStep"/>
</batch:step>
<batch:step id="myLookUpLoadStep">
<batch:tasklet>
<batch:chunk reader="myLookupItemReader"
writer="myLookupItemWriter" commit-interval="100" retry-limit="2">
<retryable-exception-classes>
<include class=" org.springframework.dao.DataAccessResourceFailureException"/>
</retryable-exception-classes>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
以下是我无法从 Spring 文档中得到答案的问题 - 希望能提供意见:
重试处理200行后异常是从201行开始还是从1行开始?
编辑
我试图解决的问题是,当作业运行时,在提交第一个块(100 行)之后,与 ItemReader 的连接立即终止(重置)。然后作业重新启动并成功完成。
我想知道这是否有帮助:
来自 AbstractCursorItemReader
有一个选项 (setUseSharedExtendedConnection(boolean) 将与步骤处理的其余部分共享用于游标的连接。如果将此标志设置为 true,则必须将 DataSource 包装在ExtendedConnectionDataSourceProxy 以防止在作为步骤处理的一部分执行的每次提交后关闭和释放连接。您还必须使用支持 JDBC 3.0 或更高版本的 JDBC 驱动程序,因为游标将使用'HOLD_CURSORS_OVER_COMMIT' 的附加选项已启用。
这取决于您的 reader。 ItemReader
实现负责通过 ItemStream
接口回调将它们自己的状态保存在 ExecutionContext
中。如果 ItemReader
通过 ItemStream#update
方法保持它的状态(在这种情况下我假设的行号),如果 ItemReader
通过 ItemSteam#open
回调方法恢复该状态,然后我希望它在正确的行重新启动。 Spring 提供的所有 ItemReader
实现都在有意义的地方使用了此功能。我只是不知道你是否愿意,因为我对你的配置中的 myLookupItemReader
没有任何了解。
以下是我重试的配置:
<batch:job id="myLookUpLoadJob">
<batch:step id="myLookUpTruncateStep">
<batch:tasklet ref="myLookupTruncateTasklet" />
<batch:next on="*" to="myLookUpLoadStep"/>
</batch:step>
<batch:step id="myLookUpLoadStep">
<batch:tasklet>
<batch:chunk reader="myLookupItemReader"
writer="myLookupItemWriter" commit-interval="100" retry-limit="2">
<retryable-exception-classes>
<include class=" org.springframework.dao.DataAccessResourceFailureException"/>
</retryable-exception-classes>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
以下是我无法从 Spring 文档中得到答案的问题 - 希望能提供意见:
重试处理200行后异常是从201行开始还是从1行开始?
编辑
我试图解决的问题是,当作业运行时,在提交第一个块(100 行)之后,与 ItemReader 的连接立即终止(重置)。然后作业重新启动并成功完成。
我想知道这是否有帮助:
来自 AbstractCursorItemReader
有一个选项 (setUseSharedExtendedConnection(boolean) 将与步骤处理的其余部分共享用于游标的连接。如果将此标志设置为 true,则必须将 DataSource 包装在ExtendedConnectionDataSourceProxy 以防止在作为步骤处理的一部分执行的每次提交后关闭和释放连接。您还必须使用支持 JDBC 3.0 或更高版本的 JDBC 驱动程序,因为游标将使用'HOLD_CURSORS_OVER_COMMIT' 的附加选项已启用。
这取决于您的 reader。 ItemReader
实现负责通过 ItemStream
接口回调将它们自己的状态保存在 ExecutionContext
中。如果 ItemReader
通过 ItemStream#update
方法保持它的状态(在这种情况下我假设的行号),如果 ItemReader
通过 ItemSteam#open
回调方法恢复该状态,然后我希望它在正确的行重新启动。 Spring 提供的所有 ItemReader
实现都在有意义的地方使用了此功能。我只是不知道你是否愿意,因为我对你的配置中的 myLookupItemReader
没有任何了解。