protected Step createSimpleStep() { SimpleStepBuilder<I, O> builder = getSimpleStepBuilder(name); setChunk(builder); enhanceTaskletStepBuilder(builder); registerItemListeners(builder); builder.reader(itemReader); builder.writer(itemWriter); builder.processor(itemProcessor); return builder.build(); }
@Bean protected Step step() { return steps.get("step").<Trade, Object> chunk(1).reader(reader()).writer(writer()).faultTolerant() .retry(Exception.class).retryLimit(3).build(); }
builder.reader(itemReader); builder.processor(itemProcessor); builder.writer(itemWriter); for (StepExecutionListener listener : BatchListenerFactoryHelper.<StepExecutionListener> getListeners( listeners, StepExecutionListener.class)) { builder.listener(listener); builder.listener(listener); builder.listener(listener); builder.listener(listener); builder.listener(listener); builder.transactionManager(transactionManager); builder.transactionAttribute(getTransactionAttribute()); builder.repository(jobRepository); builder.startLimit(startLimit); builder.allowStartIfComplete(allowStartIfComplete); builder.chunk(commitInterval); builder.chunk(chunkCompletionPolicy); builder.chunkOperations(chunkOperations); builder.stepOperations(stepOperations); builder.taskExecutor(taskExecutor); builder.throttleLimit(throttleLimit); builder.exceptionHandler(exceptionHandler); if (isReaderTransactionalQueue) { builder.readerIsTransactionalQueue();
protected void registerAsStreamsAndListeners(ItemReader<? extends I> itemReader, ItemProcessor<? super I, ? extends O> itemProcessor, ItemWriter<? super O> itemWriter) { for (Object itemHandler : new Object[] { itemReader, itemWriter, itemProcessor }) { if (itemHandler instanceof ItemStream) { stream((ItemStream) itemHandler); } if (StepListenerFactoryBean.isListener(itemHandler)) { StepListener listener = StepListenerFactoryBean.getListener(itemHandler); if (listener instanceof StepExecutionListener) { listener((StepExecutionListener) listener); } if (listener instanceof ChunkListener) { listener((ChunkListener) listener); } if (listener instanceof ItemReadListener<?> || listener instanceof ItemProcessListener<?, ?> || listener instanceof ItemWriteListener<?>) { itemListeners.add(listener); } } } }
@Test public void testAnnotationBasedChunkListenerForFaultTolerantTaskletStep() throws Exception { JobRepository jobRepository = new MapJobRepositoryFactoryBean().getObject(); StepExecution execution = jobRepository.createJobExecution("foo", new JobParameters()).createStepExecution("step"); jobRepository.add(execution); PlatformTransactionManager transactionManager = new ResourcelessTransactionManager(); SimpleStepBuilder<Object, Object> builder = new StepBuilder("step") .repository(jobRepository) .transactionManager(transactionManager) .chunk(5) .reader(new DummyItemReader()) .writer(new DummyItemWriter()) .faultTolerant() .listener(new AnnotationBasedChunkListener()); // TODO should this return FaultTolerantStepBuilder? builder.build().execute(execution); assertEquals(BatchStatus.COMPLETED, execution.getStatus()); assertEquals(1, AnnotationBasedChunkListener.beforeChunkCount); assertEquals(1, AnnotationBasedChunkListener.afterChunkCount); }
@Override public TaskletStep build() { registerStepListenerAsSkipListener(); return super.build(); }
protected void registerItemListeners(SimpleStepBuilder<I, O> builder) { for (ItemReadListener<I> listener : readListeners) { builder.listener(listener); } for (ItemWriteListener<O> listener : writeListeners) { builder.listener(listener); } for (ItemProcessListener<I, O> listener : processListeners) { builder.listener(listener); } }
@Bean public Step step(){ return customStepBuilders().get("step") .faultTolerant() .skipLimit(10) .skip(UnknownGenderException.class) .listener(logSkipListener()) .build(); }
@Bean public Step step1() { return stepBuilderFactory.get("step1") .<String, String>chunk(2) .faultTolerant() .listener(new ChunkListener()) .reader(reader()) .writer(writer()) .build(); }
/** * Create a {@link Step} from the configuration provided. * * @see FactoryBean#getObject() */ @Override public final Step getObject() throws Exception { SimpleStepBuilder<T, S> builder = createBuilder(getName()); applyConfiguration(builder); TaskletStep step = builder.build(); return step; }
@SuppressWarnings("unchecked") private void checkAndAddItemListener(StepListener stepListener) { if (stepListener instanceof ItemReadListener){ listener((ItemReadListener<I>)stepListener); } if (stepListener instanceof ItemProcessListener){ listener((ItemProcessListener<I,O>)stepListener); } if (stepListener instanceof ItemWriteListener){ listener((ItemWriteListener<O>)stepListener); } }
protected void registerAsStreamsAndListeners(ItemReader<? extends I> itemReader, ItemProcessor<? super I, ? extends O> itemProcessor, ItemWriter<? super O> itemWriter) { for (Object itemHandler : new Object[] { itemReader, itemWriter, itemProcessor }) { if (itemHandler instanceof ItemStream) { stream((ItemStream) itemHandler); } if (StepListenerFactoryBean.isListener(itemHandler)) { StepListener listener = StepListenerFactoryBean.getListener(itemHandler); if (listener instanceof StepExecutionListener) { listener((StepExecutionListener) listener); } if (listener instanceof ChunkListener) { listener((ChunkListener) listener); } if (listener instanceof ItemReadListener<?> || listener instanceof ItemProcessListener<?, ?> || listener instanceof ItemWriteListener<?>) { itemListeners.add(listener); } } } }
@Override @Bean public Step step(){ return stepBuilders.get("step") .listener(listener()) .<String,String>chunk(2) .reader(reader()) .writer(writer()) .faultTolerant() .skipLimit(1) .skip(MySkippableException.class) // ChunkListener registered twice for checking BATCH-2149 .listener((ChunkListener) listener()) .build(); } }