Starter for using the Quartz scheduler in Spring Boot applications with auto-configuration support
npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-starter-quartz@3.5.0Spring 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.
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'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;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.StdJDBCDelegateSpring Boot Starter Quartz integrates Quartz Scheduler with Spring Boot's auto-configuration mechanism:
QuartzAutoConfiguration automatically configures SchedulerFactoryBean when Quartz is on the classpathQuartzProperties provides type-safe configuration binding for spring.quartz.* propertiesMEMORY) and database-backed (JDBC) job storesSchedulerFactoryBeanCustomizer interface for advanced scheduler configurationCore 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
);
}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
}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 {
}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
);
}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
}