or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

actuator-integration.mdauto-configuration.mdconfiguration-properties.mdindex.mdscheduler-customization.md
tile.json

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

Starter for using the Quartz scheduler in Spring Boot applications with auto-configuration support

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.springframework.boot/spring-boot-starter-quartz@3.5.x

To install, run

npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-starter-quartz@3.5.0

index.mddocs/

Spring Boot Starter Quartz

Spring Boot Starter Quartz provides auto-configuration for the Quartz Scheduler framework, enabling seamless job scheduling capabilities in Spring Boot applications. It automatically configures Scheduler instances, supports both in-memory and JDBC-based job stores, and provides monitoring through Spring Boot Actuator endpoints.

Package Information

  • Package Name: org.springframework.boot:spring-boot-starter-quartz
  • Package Type: maven
  • Language: Java
  • Installation: Add to your pom.xml:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
    <version>3.5.3</version>
</dependency>

For Gradle:

implementation 'org.springframework.boot:spring-boot-starter-quartz:3.5.3'

Core Imports

import org.springframework.boot.autoconfigure.quartz.*;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.quartz.*;

For actuator endpoints:

import org.springframework.boot.actuate.quartz.*;
import org.springframework.boot.actuate.autoconfigure.quartz.*;

For customization:

import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
import org.springframework.boot.autoconfigure.quartz.QuartzTransactionManager;

Basic Usage

The starter provides automatic configuration when added as a dependency. Basic job scheduling setup:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
import org.springframework.stereotype.Component;
import org.quartz.*;

@SpringBootApplication
public class QuartzApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(QuartzApplication.class, args);
    }
    
    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob")
                .usingJobData("name", "Spring Boot Quartz")
                .storeDurably()
                .build();
    }
    
    @Bean
    public Trigger sampleJobTrigger() {
        return TriggerBuilder.newTrigger()
                .forJob(sampleJobDetail())
                .withIdentity("sampleTrigger")
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(10)
                    .repeatForever())
                .build();
    }
}

@Component  
public class SampleJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Sample job executed: " + 
            context.getJobDetail().getJobDataMap().getString("name"));
    }
}

Configuration via application.properties:

# Job store configuration
spring.quartz.job-store-type=memory
spring.quartz.scheduler-name=MyScheduler
spring.quartz.auto-startup=true
spring.quartz.startup-delay=5s
spring.quartz.wait-for-jobs-to-complete-on-shutdown=true

# JDBC configuration (when using JDBC job store)
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=embedded
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

Architecture

Spring Boot Starter Quartz integrates Quartz Scheduler with Spring Boot's auto-configuration mechanism:

  • Auto-configuration: QuartzAutoConfiguration automatically configures SchedulerFactoryBean when Quartz is on the classpath
  • Properties Binding: QuartzProperties provides type-safe configuration binding for spring.quartz.* properties
  • Job Store Support: Automatic configuration for both in-memory (MEMORY) and database-backed (JDBC) job stores
  • Spring Integration: Seamless integration with Spring's dependency injection, transaction management, and lifecycle management
  • Actuator Support: Management endpoints for monitoring jobs, triggers, and scheduler status
  • Customization: SchedulerFactoryBeanCustomizer interface for advanced scheduler configuration

Capabilities

Auto-configuration

Core auto-configuration classes that automatically set up Quartz Scheduler when the starter is present. Handles scheduler factory bean creation, job store configuration, and Spring integration.

@AutoConfiguration
public class QuartzAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public SchedulerFactoryBean quartzScheduler(
        QuartzProperties properties,
        ObjectProvider<SchedulerFactoryBeanCustomizer> customizers,
        ObjectProvider<JobDetail> jobDetails,
        Map<String, Calendar> calendars,
        ObjectProvider<Trigger> triggers,
        ApplicationContext applicationContext
    );
}

Auto-configuration

Configuration Properties

Type-safe configuration properties for customizing Quartz behavior through application.properties or application.yml. Covers scheduler settings, job store configuration, and JDBC initialization.

@ConfigurationProperties("spring.quartz")
public class QuartzProperties {
    public JobStoreType getJobStoreType();
    public void setJobStoreType(JobStoreType jobStoreType);
    public String getSchedulerName();
    public boolean isAutoStartup();
    public Duration getStartupDelay();
    public boolean isWaitForJobsToCompleteOnShutdown();
    public boolean isOverwriteExistingJobs();
    public Map<String, String> getProperties();
    public Jdbc getJdbc();
}

public enum JobStoreType {
    MEMORY, JDBC
}

Configuration Properties

Scheduler Customization

Interfaces and annotations for customizing scheduler behavior, data sources, and transaction managers. Enables fine-grained control over Quartz configuration in Spring Boot applications.

@FunctionalInterface
public interface SchedulerFactoryBeanCustomizer {
    void customize(SchedulerFactoryBean schedulerFactoryBean);
}

@Qualifier
public @interface QuartzDataSource {
}

@Qualifier  
public @interface QuartzTransactionManager {
}

Scheduler Customization

Actuator Integration

Management endpoints for monitoring and inspecting Quartz scheduler state, including jobs, triggers, and execution history. Provides both REST API and web interface for scheduler management.

@Endpoint(id = "quartz")
public class QuartzEndpoint {
    @ReadOperation
    public QuartzDescriptor quartzReport() throws SchedulerException;
    
    public QuartzGroupsDescriptor quartzJobGroups() throws SchedulerException;
    public QuartzGroupsDescriptor quartzTriggerGroups() throws SchedulerException;
}

@AutoConfiguration
public class QuartzEndpointAutoConfiguration {
    @Bean
    public QuartzEndpoint quartzEndpoint(
        Scheduler scheduler, 
        ObjectProvider<SanitizingFunction> sanitizingFunctions
    );
}

Actuator Integration

Types

public class QuartzProperties.Jdbc {
    public String getSchema();
    public void setSchema(String schema);
    public String getPlatform();
    public void setPlatform(String platform);
    public DatabaseInitializationMode getInitializeSchema();
    public void setInitializeSchema(DatabaseInitializationMode initializeSchema);
    public List<String> getCommentPrefix();
    public void setCommentPrefix(List<String> commentPrefix);
}

public class QuartzDataSourceScriptDatabaseInitializer {
    public QuartzDataSourceScriptDatabaseInitializer(
        DataSource dataSource, 
        QuartzProperties properties
    );
}

public class SchedulerDependsOnDatabaseInitializationDetector {
    // Detects scheduler dependencies on database initialization
}