You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Quartz Scheduler时集群功能无法生效问题

问题根因
  • 你手动自定义了SchedulerFactoryBean Bean,覆盖了Spring Boot自动配置的SchedulerFactoryBean实例。Spring Boot的QuartzAutoConfiguration自动配置类默认会读取application.yaml中spring.quartz前缀的所有配置,自动注入到内置的SchedulerFactoryBean中,你自行new的SchedulerFactoryBean没有绑定任何自定义配置,直接使用了Quartz默认参数:默认线程池大小为10、默认使用RAMJobStore内存作业存储(不支持持久化和集群)。
  • 你自定义的SchedulerFactoryBean也没有配置JDBC作业存储所需的数据源、事务管理器等必要参数,进一步导致JDBC存储和集群配置无法生效。
解决方案

推荐优先使用第一种方案,改动最小且符合Spring Boot约定:

方案1:删除自定义的SchedulerFactoryBean

Spring Boot自动配置的SchedulerFactoryBean会自动识别上下文中所有JobDetail、Trigger类型的Bean,自动绑定配置参数,你只需要保留JobDetail和CronTrigger的Bean定义即可。
如果需要设置ApplicationContextSchedulerContextKey,直接在application.yaml中添加配置即可:

spring:
  quartz:
    scheduler:
      context-key: your_quartz_application_context_value

方案2:手动给自定义SchedulerFactoryBean注入配置参数

如果你有特殊需求必须手动定义SchedulerFactoryBean,需要将Spring Boot加载好的Quartz配置、数据源、事务管理器等参数手动注入:

@Bean
public SchedulerFactoryBean schedulerFactoryBean(QuartzProperties quartzProperties,
                                                 DataSource dataSource,
                                                 PlatformTransactionManager transactionManager) {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    // 加载yaml中配置的所有quartz属性
    schedulerFactoryBean.setQuartzProperties(quartzProperties.getProperties());
    // 绑定触发器
    schedulerFactoryBean.setTriggers(notificationCronTrigger().getObject());
    // 设置上下文key
    schedulerFactoryBean.setApplicationContextSchedulerContextKey(QUARTZ_APPLICATION_CONTEXT);
    // 注入JDBC存储所需的数据源和事务管理器
    schedulerFactoryBean.setDataSource(dataSource);
    schedulerFactoryBean.setTransactionManager(transactionManager);
    // 同步Spring Boot Quartz配置的其他默认参数
    schedulerFactoryBean.setAutoStartup(quartzProperties.isAutoStartup());
    schedulerFactoryBean.setOverwriteExistingJobs(quartzProperties.isOverwriteExistingJobs());
    schedulerFactoryBean.setStartupDelay((int)quartzProperties.getStartupDelay().getSeconds());
    
    return schedulerFactoryBean;
}

修改完成后重启项目,日志会输出你配置的线程数和JobStoreTX作业存储,集群功能即可正常生效。

内容的提问来源于stack exchange,提问作者Jish Nair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:15:04