Batch Applications
A number of questions often arise when people use Spring Batch from within a Spring Boot application. This section addresses those questions.
Specifying a Batch Data Source
By default, batch applications require a DataSource to store job details.
Spring Batch expects a single DataSource by default.
To have it use a DataSource other than the application’s main DataSource, declare a DataSource bean, annotating its @Bean method with @BatchDataSource.
If you do so and want two data sources, remember to mark the other one @Primary.
To take greater control, implement BatchConfigurer.
See The Javadoc of @EnableBatchProcessing for more details.
For more info about Spring Batch, see the Spring Batch project page.
Running Spring Batch Jobs on Startup
Spring Batch auto-configuration is enabled by adding @EnableBatchProcessing to one of your @Configuration classes.
If a single Job is found in the application context, it is executed on startup (see JobLauncherApplicationRunner for details).
If multiple Job beans are found, the job that should be executed must be specified using spring.batch.job.name.
To disable running a Job found in the application content, set the spring.batch.job.enabled to false.
See BatchAutoConfiguration and @EnableBatchProcessing for more details.
Running From the Command Line
Spring Boot converts any command line argument starting with -- to a property to add to the Environment, see accessing command line properties.
This should not be used to pass arguments to batch jobs.
To specify batch arguments on the command line, use the regular format (that is without --), as shown in the following example:
$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValueIf you specify a property of the Environment on the command line, it is ignored by the job.
Consider the following command:
$ java -jar myapp.jar --server.port=7070 someParameter=someValueThis provides only one argument to the batch job: someParameter=someValue.
Storing the Job Repository
Spring Batch requires a data store for the Job repository.
If you use Spring Boot, you must use an actual database.
Note that it can be an in-memory database, see Configuring a Job Repository.