[[configuringAStep]] = Configuring a Step Despite the relatively short list of required dependencies for a `Step`, it is an extremely complex class that can potentially contain many collaborators. [tabs] ==== Java:: + When using Java configuration, you can use the Spring Batch builders, as the following example shows: + .Java Configuration [source, java] ---- /** * Note the JobRepository is typically autowired in and not needed to be explicitly * configured */ @Bean public Job sampleJob(JobRepository jobRepository, Step sampleStep) { return new JobBuilder("sampleJob", jobRepository) .start(sampleStep) .build(); } /** * Note the TransactionManager is typically autowired in and not needed to be explicitly * configured */ @Bean public Step sampleStep(JobRepository jobRepository, // <2> PlatformTransactionManager transactionManager) { // <1> return new StepBuilder("sampleStep", jobRepository) .chunk(10, transactionManager) // <3> .reader(itemReader()) .writer(itemWriter()) .build(); } ---- <1> `transactionManager`: Spring's `PlatformTransactionManager` that begins and commits transactions during processing. <2> `repository`: The Java-specific name of the `JobRepository` that periodically stores the `StepExecution` and `ExecutionContext` during processing (just before committing). <3> `chunk`: The Java-specific name of the dependency that indicates that this is an item-based step and the number of items to be processed before the transaction is committed. + NOTE: Note that `repository` defaults to `jobRepository` (provided through `@EnableBatchProcessing`) and `transactionManager` defaults to `transactionManager` (provided from the application context). Also, the `ItemProcessor` is optional, since the item could be directly passed from the reader to the writer. XML:: + To ease configuration, you can use the Spring Batch XML namespace, as the following example shows: + .XML Configuration [source, xml] ---- ---- <1> `transaction-manager`: Spring's `PlatformTransactionManager` that begins and commits transactions during processing. <2> `job-repository`: The XML-specific name of the `JobRepository` that periodically stores the `StepExecution` and `ExecutionContext` during processing (just before committing). For an in-line `` (one defined within a ``), it is an attribute on the `` element. For a standalone ``, it is defined as an attribute of the ``. <3> `commit-interval`: The XML-specific name of the number of items to be processed before the transaction is committed. + NOTE: Note that `job-repository` defaults to `jobRepository` and `transaction-manager` defaults to `transactionManager`. Also, the `ItemProcessor` is optional, since the item could be directly passed from the reader to the writer. ==== The preceding configuration includes the only required dependencies to create a item-oriented step: * `reader`: The `ItemReader` that provides items for processing. * `writer`: The `ItemWriter` that processes the items provided by the `ItemReader`.