Spring batch Spring批处理死锁丢失DataAccessException

Spring batch Spring批处理死锁丢失DataAccessException,spring-batch,Spring Batch,我正在使用带分区的Spring批处理。 最初,我得到DeadlockLoserDataAccessException,然后我将我们的步骤配置为容错,请参阅以下代码- Step masterCalculationStep = stepBuilderFactory.get("STEP_1") .<Map<Long, List<CostCalculation>>, List<TempCostCalc>>chunk(1

我正在使用带分区的Spring批处理。 最初,我得到DeadlockLoserDataAccessException,然后我将我们的步骤配置为容错,请参阅以下代码-

Step masterCalculationStep = stepBuilderFactory.get("STEP_1")
                   .<Map<Long, List<CostCalculation>>, List<TempCostCalc>>chunk(1).reader(reader)
                   .processor(processor)
                   .writer(writer)
                   .faultTolerant()
                   .retryLimit(5)
                   .retry(DeadlockLoserDataAccessException.class)
                   .build();
Step masterCalculationStep=stepBuilderFactory.get(“步骤1”)
.块(1).读取器(读取器)
.处理器(处理器)
.作者(作者)
.容错()
.再犯限制(5)
.retry(死锁丢失DataAccessException.class)
.build();
但现在我们得到了另一个例外-

org.springframework.batch.core.step.skip.NonSkippableReadException: 读取期间不可跳过的异常


不知道为什么会出现此新异常以及如何解决它

面向块的步骤中的
RetryPolicy
不应用于读取器。因此,如果您的读卡器可能抛出一个暂时异常,您需要在读卡器周围添加重试逻辑。这可以通过以下方式实现:

  • 通过将
    org.springframework.retry.interceptor.RetryOperationsInterceptor
    应用于您的读者,实现AOP
  • 或者在读取器的装饰器中使用
    org.springframework.retry.support.RetryTemplate
    ,当它抛出一个暂时异常时,将
    read
    方法重定时
类似的问题可以在这里找到:


希望这能有所帮助。

面向块的步骤中的
RetryPolicy
不适用于读者。因此,如果您的读卡器可能抛出一个暂时异常,您需要在读卡器周围添加重试逻辑。这可以通过以下方式实现:

  • 通过将
    org.springframework.retry.interceptor.RetryOperationsInterceptor
    应用于您的读者,实现AOP
  • 或者在读取器的装饰器中使用
    org.springframework.retry.support.RetryTemplate
    ,当它抛出一个暂时异常时,将
    read
    方法重定时
类似的问题可以在这里找到:


希望这有帮助。

您是否尝试将
死锁丢失数据访问异常声明为可跳过?不,我不想跳过:)请发布完整的堆栈跟踪。看起来此异常是在读取期间引发的。你的项目阅读器类型是什么?是的,Mahmoud,你是对的,阅读器有点问题,我使用的是带有jdbcTemplate的自定义项目阅读器。我会进一步检查-谢谢你的提示。希望我现在能弄明白:)Stacktrace org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:105)位于org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInitation(SimpleChunkProvider.java:119)位于。。。。原因:org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;您是否已尝试将死锁丢失的DataAccessException声明为可跳过?不,我不想跳过:)请发布完整的堆栈跟踪。看起来此异常是在读取期间引发的。你的项目阅读器类型是什么?是的,Mahmoud,你是对的,阅读器有点问题,我使用的是带有jdbcTemplate的自定义项目阅读器。我会进一步检查-谢谢你的提示。希望我现在能弄明白:)Stacktrace org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:105)位于org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInitation(SimpleChunkProvider.java:119)位于。。。。原因:org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;现在我没有得到暂时异常,但这是否意味着在死锁丢失DataAccessException的情况下,它将跳过记录而不出现任何异常,并且作业将成功完成?我在使用jdbctemple将记录写入数据库时遇到死锁LoserDataAccessException,是否只想重试插入?可能吗?
我在写记录时遇到死锁丢失的DataAccessException
你说你在阅读时遇到了这个异常。如果在写入时发生,则容错步骤将应用
RetryPolicy
。现在我没有得到暂时异常,但这是否意味着在死锁丢失DataAccessException的情况下,它将跳过记录而不出现任何异常,作业将成功完成?我在使用jdbctemple将记录写入数据库时遇到死锁LoserDataAccessException,是否只想重试插入?可能吗?
我在写记录时遇到死锁丢失的DataAccessException
你说你在阅读时遇到了这个异常。如果在写入时发生,则容错步骤将应用
RetryPolicy