CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-springframework-boot--spring-boot-starter-batch

Spring Boot starter that provides comprehensive batch processing capabilities for enterprise Java applications with auto-configuration, job management, and database integration.

Pending
Overview
Eval results
Files

configuration-properties.mddocs/

Configuration Properties

Spring Boot Batch Starter provides extensive configuration options through externalized properties under the spring.batch prefix, allowing fine-tuned control over batch processing behavior without code changes.

Capabilities

BatchProperties

Main configuration properties class that binds to spring.batch properties and provides structured access to batch configuration options.

/**
 * Configuration properties for Spring Batch under spring.batch prefix
 */
@ConfigurationProperties("spring.batch")
public class BatchProperties {

    /**
     * Gets job-related configuration properties
     */
    public Job getJob();
    
    /**
     * Gets JDBC-related configuration properties  
     */
    public Jdbc getJdbc();
}

Usage Examples:

@Component
public class BatchConfigurationService {
    
    @Autowired
    private BatchProperties batchProperties;
    
    public void logConfiguration() {
        String jobName = batchProperties.getJob().getName();
        String tablePrefix = batchProperties.getJdbc().getTablePrefix();
        System.out.println("Job: " + jobName + ", Tables: " + tablePrefix);
    }
}

Job Configuration Properties

Controls job execution behavior and startup parameters.

/**
 * Job-related configuration properties under spring.batch.job prefix
 */
public static class Job {
    
    /**
     * Job name to execute on startup. Must be specified if multiple Jobs are found in the context.
     * Default: empty string (runs any single job found, fails if multiple jobs exist)
     */
    public String getName();
    
    /**
     * Sets the specific job name to execute on application startup
     */
    public void setName(String name);
}

Property Configuration:

# Specify which job to run on startup (required if multiple jobs exist)
spring.batch.job.name=dailyReportJob

# Disable automatic job execution on startup  
spring.batch.job.enabled=false

Usage Examples:

@SpringBootApplication
public class MultiJobApplication {
    
    @Bean
    public Job dailyReportJob(JobRepository jobRepository, Step reportStep) {
        return new JobBuilder("dailyReportJob", jobRepository)
                .start(reportStep)
                .build();
    }
    
    @Bean  
    public Job weeklyCleanupJob(JobRepository jobRepository, Step cleanupStep) {
        return new JobBuilder("weeklyCleanupJob", jobRepository)
                .start(cleanupStep)
                .build();
    }
}

# application.properties
spring.batch.job.name=dailyReportJob  # Only this job will run on startup

JDBC Configuration Properties

Controls database behavior, schema initialization, and transaction settings for batch metadata storage.

/**
 * JDBC-related configuration properties under spring.batch.jdbc prefix
 */
public static class Jdbc {
    
    /**
     * Default schema location with platform placeholder
     */
    public static final String DEFAULT_SCHEMA_LOCATION = 
        "classpath:org/springframework/batch/core/schema-@@platform@@.sql";
    
    /**
     * Whether to validate the transaction state before job execution
     * Default: true
     */
    public boolean isValidateTransactionState();
    public void setValidateTransactionState(boolean validateTransactionState);
    
    /**
     * Transaction isolation level to use when creating job meta-data for new jobs
     * Default: null (uses database default)
     */
    public Isolation getIsolationLevelForCreate();
    public void setIsolationLevelForCreate(Isolation isolationLevelForCreate);
    
    /**
     * Path to the SQL file to use to initialize the database schema
     * Default: "classpath:org/springframework/batch/core/schema-@@platform@@.sql"
     */
    public String getSchema();
    public void setSchema(String schema);
    
    /**
     * Platform to use in initialization scripts if the @@platform@@ placeholder is used
     * Auto-detected by default based on DataSource
     */
    public String getPlatform();
    public void setPlatform(String platform);
    
    /**
     * Table prefix for all the batch meta-data tables
     * Default: null (uses Spring Batch default prefix)
     */
    public String getTablePrefix();
    public void setTablePrefix(String tablePrefix);
    
    /**
     * Database schema initialization mode
     * Default: EMBEDDED (initialize only for embedded databases)
     */
    public DatabaseInitializationMode getInitializeSchema();
    public void setInitializeSchema(DatabaseInitializationMode initializeSchema);
}

Property Configuration:

# Database schema initialization
spring.batch.jdbc.initialize-schema=always
spring.batch.jdbc.platform=postgresql
spring.batch.jdbc.schema=classpath:custom-batch-schema.sql

# Table customization
spring.batch.jdbc.table-prefix=CUSTOM_BATCH_

# Transaction settings
spring.batch.jdbc.validate-transaction-state=true
spring.batch.jdbc.isolation-level-for-create=read_committed

Usage Examples:

// Custom database configuration
@Configuration
public class BatchDatabaseConfiguration {
    
    @Bean
    @BatchDataSource
    @ConfigurationProperties("batch.datasource")
    public DataSource batchDataSource() {
        return DataSourceBuilder.create().build();
    }
}

# application.yml
batch:
  datasource:
    url: jdbc:postgresql://localhost:5432/batch_db
    username: batch_user  
    password: batch_pass
    
spring:
  batch:
    jdbc:
      initialize-schema: always
      table-prefix: CUSTOM_BATCH_
      platform: postgresql

Database Schema Initialization Modes

Control when and how batch metadata tables are created:

/**
 * Database initialization modes for batch schema creation
 */
public enum DatabaseInitializationMode {
    /**
     * Never initialize the database schema
     */
    NEVER,
    
    /**
     * Initialize only embedded databases (H2, HSQL, Derby)
     */
    EMBEDDED,
    
    /**
     * Always initialize the database schema on startup
     */
    ALWAYS
}

Transaction Isolation Levels

Configure transaction isolation for job metadata operations:

/**
 * Transaction isolation levels for batch operations
 */
public enum Isolation {
    DEFAULT,           // Use database default
    READ_UNCOMMITTED,  // Lowest isolation, highest performance
    READ_COMMITTED,    // Most common isolation level
    REPEATABLE_READ,   // Prevents non-repeatable reads
    SERIALIZABLE       // Highest isolation, lowest performance
}

Property Reference

Complete Property List

# Job execution properties
spring.batch.job.enabled=true                    # Enable automatic job execution
spring.batch.job.name=                          # Specific job name to execute

# JDBC configuration properties  
spring.batch.jdbc.initialize-schema=embedded     # Schema initialization mode
spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-@@platform@@.sql
spring.batch.jdbc.platform=                     # Database platform (auto-detected)
spring.batch.jdbc.table-prefix=                 # Custom table prefix
spring.batch.jdbc.validate-transaction-state=true   # Enable transaction validation
spring.batch.jdbc.isolation-level-for-create=default # Transaction isolation level

Environment-Specific Configuration

# application-dev.yml
spring:
  batch:
    jdbc:
      initialize-schema: always
      table-prefix: DEV_BATCH_
    job:
      enabled: true

---
# application-prod.yml  
spring:
  batch:
    jdbc:
      initialize-schema: never  # Schema managed externally in production
      table-prefix: PROD_BATCH_
      validate-transaction-state: true
      isolation-level-for-create: read_committed
    job:
      enabled: false  # Jobs triggered externally in production

Integration with Other Properties

Batch properties work alongside other Spring Boot configuration:

# Database connection (works with batch DataSource)
spring.datasource.url=jdbc:h2:mem:batchdb
spring.datasource.driver-class-name=org.h2.Driver

# JPA settings (batch uses separate tables)
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true

# Actuator endpoints for monitoring
management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always

Install with Tessl CLI

npx tessl i tessl/maven-org-springframework-boot--spring-boot-starter-batch

docs

auto-configuration.md

configuration-properties.md

customization.md

index.md

job-execution.md

tile.json