diff --git a/spring-batch-core/src/main/java/org/springframework/batch/execution/step/support/StatefulRetryStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/execution/step/support/StatefulRetryStepFactoryBean.java index 62f6ec8cb..2b5f6d4aa 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/execution/step/support/StatefulRetryStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/execution/step/support/StatefulRetryStepFactoryBean.java @@ -23,6 +23,7 @@ import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemRecoverer; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.repeat.ExitStatus; +import org.springframework.batch.retry.RetryListener; import org.springframework.batch.retry.RetryOperations; import org.springframework.batch.retry.RetryPolicy; import org.springframework.batch.retry.backoff.BackOffPolicy; @@ -59,6 +60,8 @@ public class StatefulRetryStepFactoryBean extends DefaultStepFactoryBean { private BackOffPolicy backOffPolicy; + private RetryListener[] retryListeners; + /** * Public setter for the retry limit. Each item can be retried up to this * limit. @@ -84,6 +87,14 @@ public class StatefulRetryStepFactoryBean extends DefaultStepFactoryBean { this.backOffPolicy = backOffPolicy; } + /** + * Public setter for the {@link RetryListener}s. + * @param retryListeners the {@link RetryListener}s to set + */ + public void setRetryListeners(RetryListener[] retryListeners) { + this.retryListeners = retryListeners; + } + /** * Public setter for the {@link ItemKeyGenerator} which will be used to * cache failed items between transactions. If it is not injected but the @@ -135,6 +146,9 @@ public class StatefulRetryStepFactoryBean extends DefaultStepFactoryBean { ItemReaderRetryPolicy itemProviderRetryPolicy = new ItemReaderRetryPolicy(retryPolicy); RetryTemplate retryTemplate = new RetryTemplate(); + if (retryListeners!=null) { + retryTemplate.setListeners(retryListeners); + } retryTemplate.setRetryPolicy(itemProviderRetryPolicy); if (backOffPolicy != null) { retryTemplate.setBackOffPolicy(backOffPolicy);