Spring Boot starter that provides comprehensive batch processing capabilities for enterprise Java applications with auto-configuration, job management, and database integration.
npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-starter-batch@3.5.0Spring Boot Batch Starter provides comprehensive auto-configuration and infrastructure for Spring Batch applications. It automatically configures batch processing components including job repositories, job launchers, transaction management, and database schema initialization, enabling developers to quickly build robust batch processing applications.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
<version>3.5.3</version>
</dependency>Gradle:
implementation 'org.springframework.boot:spring-boot-starter-batch:3.5.3'import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.boot.autoconfigure.batch.BatchProperties;
import org.springframework.boot.autoconfigure.batch.JobLauncherApplicationRunner;import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.PlatformTransactionManager;
@SpringBootApplication
public class BatchApplication {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Bean
public Job sampleJob(JobRepository jobRepository, Step sampleStep) {
return new JobBuilder("sampleJob", jobRepository)
.start(sampleStep)
.build();
}
@Bean
public Step sampleStep(JobRepository jobRepository,
PlatformTransactionManager transactionManager) {
return new StepBuilder("sampleStep", jobRepository)
.tasklet(sampleTasklet(), transactionManager)
.build();
}
@Bean
public Tasklet sampleTasklet() {
return (contribution, chunkContext) -> {
System.out.println("Hello from Spring Batch!");
return RepeatStatus.FINISHED;
};
}
}Spring Boot Batch Starter is built around several key components:
BatchAutoConfiguration automatically configures batch infrastructure when Spring Batch is on the classpathJobLauncherApplicationRunner automatically launches batch jobs on application startupBatchProperties provides externalized configuration via spring.batch.* propertiesAutomatic configuration of Spring Batch infrastructure including job repository, job launcher, and transaction management with sensible defaults.
@AutoConfiguration
public class BatchAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public JobLauncherApplicationRunner jobLauncherApplicationRunner(
JobLauncher jobLauncher,
JobExplorer jobExplorer,
JobRepository jobRepository,
BatchProperties properties);
@Bean
@ConditionalOnMissingBean(ExitCodeGenerator.class)
public JobExecutionExitCodeGenerator jobExecutionExitCodeGenerator();
}Externalized configuration for batch processing behavior, database settings, and job execution parameters.
@ConfigurationProperties("spring.batch")
public class BatchProperties {
public Job getJob();
public Jdbc getJdbc();
public static class Job {
public String getName();
public void setName(String name);
}
public static class Jdbc {
public boolean isValidateTransactionState();
public void setValidateTransactionState(boolean validateTransactionState);
public Isolation getIsolationLevelForCreate();
public String getTablePrefix();
public DatabaseInitializationMode getInitializeSchema();
}
}Automatic job launching capabilities with application startup integration and exit code generation.
public class JobLauncherApplicationRunner implements ApplicationRunner, InitializingBean {
public void run(ApplicationArguments args) throws JobExecutionException;
public void setJobName(String jobName);
public void setJobParameters(JobParameters jobParameters);
public void setJobParametersConverter(JobParametersConverter converter);
}
public class JobExecutionExitCodeGenerator
implements ApplicationListener<JobExecutionEvent>, ExitCodeGenerator {
public void onApplicationEvent(JobExecutionEvent event);
public int getExitCode();
}Qualifier annotations and customization interfaces for advanced configuration scenarios with multiple data sources or transaction managers.
@Qualifier
public @interface BatchDataSource {
}
@Qualifier
public @interface BatchTransactionManager {
}
@Qualifier
public @interface BatchTaskExecutor {
}
@FunctionalInterface
public interface BatchConversionServiceCustomizer {
void customize(ConfigurableConversionService configurableConversionService);
}Customization and Qualification
Key configuration properties for customizing batch behavior:
# Job execution
spring.batch.job.enabled=true
spring.batch.job.name=myBatchJob
# Database configuration
spring.batch.jdbc.initialize-schema=embedded
spring.batch.jdbc.table-prefix=BATCH_
spring.batch.jdbc.validate-transaction-state=true
spring.batch.jdbc.isolation-level-for-create=defaultWhen using multiple data sources, qualify the batch-specific data source:
@Bean
@BatchDataSource
@ConfigurationProperties("batch.datasource")
public DataSource batchDataSource() {
return DataSourceBuilder.create().build();
}Configure job parameters through application arguments or properties:
java -jar myapp.jar --job.parameter1=value1 --job.parameter2=value2public class JobExecutionEvent extends ApplicationEvent {
public JobExecutionEvent(JobExecution execution);
public JobExecution getJobExecution();
}
public class BatchDataSourceScriptDatabaseInitializer
extends DataSourceScriptDatabaseInitializer {
public BatchDataSourceScriptDatabaseInitializer(
DataSource dataSource,
BatchProperties.Jdbc properties);
public BatchDataSourceScriptDatabaseInitializer(
DataSource dataSource,
DatabaseInitializationSettings settings);
public static DatabaseInitializationSettings getSettings(
DataSource dataSource,
BatchProperties.Jdbc properties);
}
class JobRepositoryDependsOnDatabaseInitializationDetector
extends AbstractBeansOfTypeDependsOnDatabaseInitializationDetector {
@Override
protected Set<Class<?>> getDependsOnDatabaseInitializationBeanTypes();
}