diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java index 1a4a322b3..1ddc7673b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/FaultTolerantStepBuilder.java @@ -722,5 +722,21 @@ public class FaultTolerantStepBuilder extends SimpleStepBuilder { throw new FatalStepExecutionException("ChunkListener threw exception, rethrowing as fatal", t); } } + + @Override + public int hashCode() { + return chunkListener.hashCode(); + } + + @SuppressWarnings("unchecked") + @Override + public boolean equals(Object obj) { + if (obj instanceof FaultTolerantStepBuilder.TerminateOnExceptionChunkListenerDelegate){ + // unwrap the ChunkListener + obj = ((TerminateOnExceptionChunkListenerDelegate)obj).chunkListener; + } + return chunkListener.equals(obj); + } + } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/RegisterMultiListenerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/RegisterMultiListenerTests.java index fb49c8570..b2ffe0c1c 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/RegisterMultiListenerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/RegisterMultiListenerTests.java @@ -85,7 +85,7 @@ public class RegisterMultiListenerTests { * @throws Exception */ @Test - public void testMultiListenerSimpleStep() throws Exception { + public void testMultiListenerFaultTolerantStep() throws Exception { bootstrap(MultiListenerFaultTolerantTestConfiguration.class); JobExecution execution = jobLauncher.run(job, new JobParameters()); @@ -97,7 +97,7 @@ public class RegisterMultiListenerTests { } @Test - public void testMultiListenerFaultTolerantStep() throws Exception { + public void testMultiListenerSimpleStep() throws Exception { bootstrap(MultiListenerTestConfiguration.class); JobExecution execution = jobLauncher.run(job, new JobParameters()); @@ -201,8 +201,9 @@ public class RegisterMultiListenerTests { .writer(writer()) .faultTolerant() .skipLimit(1) - .listener((SkipListener) listener()) .skip(MySkippableException.class) + // ChunkListener registered twice for checking BATCH-2149 + .listener((ChunkListener) listener()) .build(); } }