org.springframework.batch.core.configuration.annotation
Annotation Type EnableBatchProcessing


@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Import(value=BatchConfigurationSelector.class)
public @interface EnableBatchProcessing

Enable Spring Batch features and provide a base configuration for setting up batch jobs in an @Configuration class, roughly equivalent to using the <batch:*> XML namespace.

 @Configuration
 @EnableBatchProcessing
 @Import(DataSourceCnfiguration.class)
 public class AppConfig {

        @Autowired
        private JobBuilderFactory jobs;

        @Bean
        public Job job() {
                return jobs.get("myJob").start(step1()).next(step2()).build();
        }

        @Bean
    protected Step step1() {
       ...
    }

        @Bean
    protected Step step2() {
     ...
    }
 }
 
The user has to provide a DataSource as a bean in the context, or else implement BatchConfigurer in the configuration class itself, e.g.
 @Configuration
 @EnableBatchProcessing
 public class AppConfig extends DefaultBatchConfigurer {

    @Bean
    public Job job() {
       ...
    }

    @Override
    protected JobRepository createJobRepository() {
       ...
    }

  ...

 }
 
Note that only one of your configuration classes needs to have the @EnableBatchProcessing annotation. Once you have an @EnableBatchProcessing class in your configuration you will have an instance of StepScope so your beans inside steps can have @Scope("step"). You will also be able to @Autowired some useful stuff into your context: If the configuration is specified as modular=true then the context will also contain an AutomaticJobRegistrar. The job registrar is useful for modularizing your configuration if there are multiple jobs. It works by creating separate child application contexts containing job configurations and registering those jobs. The jobs can then create steps and other dependent components without needing to worry about bean definition name clashes. Beans of type ApplicationContextFactory will be registered automatically with the job registrar. Example:
 @Configuration
 @EnableBatchProcessing(modular=true)
 public class AppConfig {

    @Bean
    public ApplicationContextFactory someJobs() {
       return new GenericApplicationContextFactory(SomeJobConfiguration.class);
    }

    @Bean
    public ApplicationContextFactory moreJobs() {
       return new GenericApplicationContextFactory(MoreJobConfiguration.class);
    }

  ...

 }
 
Note that a modular parent context in general should not itself contain @Bean definitions for job, especially if a BatchConfigurer is provided, because cyclic configuration dependencies are otherwise likely to develop.

For reference, the first example above can be compared to the following Spring XML configuration:

 <batch>
     <job-repository />
     <job id="myJob">
       <step id="step1" .../>
       <step id="step2" .../>
     </job>
     <beans:bean id="transactionManager" .../>
     <beans:bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
       <beans:property name="jobRepository" ref="jobRepository" />
     </beans:bean>
 </batch>
 
 

Author:
Dave Syer

Optional Element Summary
 boolean modular
          Indicate whether the configuration is going to be modularized into multiple application contexts.
 

modular

public abstract boolean modular
Indicate whether the configuration is going to be modularized into multiple application contexts. If true then you should not create any @Bean Job definitions in this context, but rather supply them in separate (child) contexts through an ApplicationContextFactory.

Default:
false


Copyright © 2013 SpringSource. All Rights Reserved.