A number of questions often arise when people use Spring Batch from within a Spring Boot application. This section addresses those questions.
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 {spring-batch-api}/core/configuration/annotation/EnableBatchProcessing.html[The Javadoc of @EnableBatchProcessing
] for more details.
For more info about Spring Batch, see the {spring-batch}[Spring Batch project page].
Spring Batch auto-configuration is enabled by adding @EnableBatchProcessing
to one of your @Configuration
classes.
By default, it executes all Jobs
in the application context on startup (see {spring-boot-autoconfigure-module-code}/batch/JobLauncherApplicationRunner.java[JobLauncherApplicationRunner
] for details).
You can narrow down to a specific job or jobs by specifying spring.batch.job.names
(which takes a comma-separated list of job name patterns).
See {spring-boot-autoconfigure-module-code}/batch/BatchAutoConfiguration.java[BatchAutoConfiguration] and {spring-batch-api}/core/configuration/annotation/EnableBatchProcessing.html[@EnableBatchProcessing] for more details.
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=anotherValue
If 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=someValue
This provides only one argument to the batch job: someParameter=someValue
.