@Override public RemoteChunkingMasterStepBuilder<I, O> retryLimit(int retryLimit) { super.retryLimit(retryLimit); return this; }
@Bean protected Step step() { return steps.get("step").<Trade, Object> chunk(1).reader(reader()).writer(writer()).faultTolerant() .retry(Exception.class).retryLimit(3).build(); }
faultTolerantBuilder.keyGenerator(keyGenerator); faultTolerantBuilder.retryPolicy(retryPolicy); faultTolerantBuilder.retryLimit(retryLimit); faultTolerantBuilder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
builder.retryLimit(retryLimit); builder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
@Test public void testFilterCountOnRetryWithTransactionalProcessorWhenSkipInWrite() throws Exception { // Given Step step = stepBuilder .retry(IllegalArgumentException.class) .retryLimit(2) .skipPolicy(skipPolicy) .build(); // When StepExecution stepExecution = execute(step); // Then assertEquals(TOTAL_ITEMS, stepExecution.getReadCount()); // filter count is expected to be counted on each retry attempt assertEquals(20, stepExecution.getFilterCount()); assertEquals(19, stepExecution.getWriteCount()); assertEquals(1, stepExecution.getWriteSkipCount()); }
@Test public void testFilterCountOnRetryWithNonTransactionalProcessorWhenSkipInWrite() throws Exception { // Given Step step = stepBuilder .retry(IllegalArgumentException.class) .retryLimit(2) .skipPolicy(skipPolicy) .processorNonTransactional() .build(); // When StepExecution stepExecution = execute(step); // Then assertEquals(TOTAL_ITEMS, stepExecution.getReadCount()); // filter count is expected to be counted on each retry attempt assertEquals(20, stepExecution.getFilterCount()); assertEquals(19, stepExecution.getWriteCount()); assertEquals(1, stepExecution.getWriteSkipCount()); }
@Test public void testRetryReadError() throws Exception{ reader.failCount = 10; Step step = builder.faultTolerant().retry(RuntimeException.class).retryLimit(20).chunk(25).reader(reader).processor(processor).writer(writer).listener((ItemReadListener<String>) listener).build(); runStep(step); assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus()); assertEquals(25, processor.count); assertEquals(25, writer.results.size()); assertEquals(0, stepExecution.getProcessSkipCount()); assertEquals(25, stepExecution.getReadCount()); assertEquals(0, stepExecution.getReadSkipCount()); assertEquals(0, stepExecution.getSkipCount()); assertEquals(25, stepExecution.getWriteCount()); assertEquals(0, stepExecution.getFilterCount()); assertEquals(0, stepExecution.getWriteSkipCount()); assertEquals(0, stepExecution.getFailureExceptions().size()); assertEquals(25, listener.afterProcess); assertEquals(25, listener.afterRead); assertEquals(1, listener.afterWrite); assertEquals(25, listener.beforeProcess); assertEquals(27, listener.beforeRead); assertEquals(1, listener.beforeWriteCount); assertEquals(0, listener.onProcessError); assertEquals(1, listener.onReadError); assertEquals(0, listener.onWriteError); }
@Test public void testRetryProcessError() throws Exception{ processor.failCount = 10; Step step = builder.faultTolerant().retry(RuntimeException.class).retryLimit(20).chunk(25).reader(reader).processor(processor).writer(writer).listener((ItemReadListener<String>) listener).build(); runStep(step); assertNotNull(stepExecution); assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus()); assertEquals(26, processor.count); assertEquals(25, writer.results.size()); assertEquals(0, stepExecution.getProcessSkipCount()); assertEquals(25, stepExecution.getReadCount()); assertEquals(0, stepExecution.getReadSkipCount()); assertEquals(0, stepExecution.getSkipCount()); assertEquals(25, stepExecution.getWriteCount()); assertEquals(0, stepExecution.getFilterCount()); assertEquals(0, stepExecution.getWriteSkipCount()); assertEquals(0, stepExecution.getFailureExceptions().size()); assertEquals(25, listener.afterProcess); assertEquals(25, listener.afterRead); assertEquals(1, listener.afterWrite); assertEquals(26, listener.beforeProcess); assertEquals(26, listener.beforeRead); assertEquals(1, listener.beforeWriteCount); assertEquals(1, listener.onProcessError); assertEquals(0, listener.onReadError); assertEquals(0, listener.onWriteError); }
@Test public void testRetryWriteError() throws Exception{ writer.fail = true; Step step = builder.faultTolerant().retry(RuntimeException.class).retryLimit(25).chunk(25).reader(reader).processor(processor).writer(writer).listener((ItemReadListener<String>) listener).build(); runStep(step); assertEquals(25, processor.count); assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus()); assertEquals(25, writer.results.size()); assertEquals(0, stepExecution.getProcessSkipCount()); assertEquals(25, stepExecution.getReadCount()); assertEquals(0, stepExecution.getReadSkipCount()); assertEquals(0, stepExecution.getSkipCount()); assertEquals(25, stepExecution.getWriteCount()); assertEquals(0, stepExecution.getFilterCount()); assertEquals(0, stepExecution.getWriteSkipCount()); assertEquals(25, listener.afterProcess); assertEquals(25, listener.afterRead); assertEquals(1, listener.afterWrite); assertEquals(25, listener.beforeProcess); assertEquals(26, listener.beforeRead); assertEquals(2, listener.beforeWriteCount); assertEquals(0, listener.onProcessError); assertEquals(0, listener.onReadError); assertEquals(1, listener.onWriteError); }
@Bean public Step step1() { return stepBuilderFactory.get("step") .<String, String>chunk(10) .reader(reader()) .processor(processor(null)) .writer(writer(null)) .faultTolerant() .retry(CustomRetryableException.class) .retryLimit(15) .build(); }
faultTolerantBuilder.keyGenerator(keyGenerator); faultTolerantBuilder.retryPolicy(retryPolicy); faultTolerantBuilder.retryLimit(retryLimit); faultTolerantBuilder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
faultTolerantBuilder.keyGenerator(keyGenerator); faultTolerantBuilder.retryPolicy(retryPolicy); faultTolerantBuilder.retryLimit(retryLimit); faultTolerantBuilder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
faultTolerantBuilder.keyGenerator(keyGenerator); faultTolerantBuilder.retryPolicy(retryPolicy); faultTolerantBuilder.retryLimit(retryLimit); faultTolerantBuilder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
builder.retryLimit(retryLimit); builder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
builder.retryLimit(retryLimit); builder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {
builder.retryLimit(retryLimit); builder.backOffPolicy(backOffPolicy); for (Class<? extends Throwable> type : retryableExceptionClasses.keySet()) {