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

Spring Boot中QuartzJobBean任务调度频率修改:从每分钟改为每小时

调整Quartz任务为每小时执行的方案

你的任务基于Quartz的QuartzJobBean实现,要从每分钟执行改为每小时执行,核心是修改触发器的时间配置,以下是两种常用实现方式:

方式一:使用Cron表达式(推荐,灵活性高)

每小时执行的标准Cron表达式为 0 0 * * * ?,含义是每小时的0分0秒触发一次。

配置示例(Java配置类)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {

    // 定义任务详情
    @Bean
    public JobDetailFactoryBean applicationPendingConsentJobDetail() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(ApplicationPendingConsentJob.class);
        factoryBean.setDurability(true); // 标记任务持久化,避免重启丢失
        return factoryBean;
    }

    // 配置Cron触发器
    @Bean
    public CronTriggerFactoryBean applicationPendingConsentTrigger() {
        CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
        factoryBean.setJobDetail(applicationPendingConsentJobDetail().getObject());
        factoryBean.setCronExpression("0 0 * * * ?"); // 每小时执行一次
        return factoryBean;
    }

    // 注册调度器
    @Bean
    public SchedulerFactoryBean scheduler() {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        factoryBean.setTriggers(applicationPendingConsentTrigger().getObject());
        return factoryBean;
    }
}

配置示例(application.yml简化配置)

spring:
  quartz:
    job-store-type: memory # 根据需求选择memory或jdbc(持久化)
    properties:
      org:
        quartz:
          threadPool:
            threadCount: 10
    jobs:
      application-pending-consent:
        job-class: com.your.package.ApplicationPendingConsentJob # 替换为你的类全路径
        triggers:
          cron:
            cron-expression: 0 0 * * * ?

方式二:使用SimpleTrigger(适合固定间隔场景)

如果不需要Cron的灵活调度规则,可以直接设置重复间隔为3600秒(1小时):

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetailFactoryBean applicationPendingConsentJobDetail() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(ApplicationPendingConsentJob.class);
        factoryBean.setDurability(true);
        return factoryBean;
    }

    @Bean
    public SimpleTriggerFactoryBean applicationPendingConsentTrigger() {
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        factoryBean.setJobDetail(applicationPendingConsentJobDetail().getObject());
        factoryBean.setRepeatInterval(3600000); // 间隔3600000毫秒 = 1小时
        factoryBean.setStartDelay(0); // 项目启动后立即执行第一次
        return factoryBean;
    }

    @Bean
    public SchedulerFactoryBean scheduler() {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        factoryBean.setTriggers(applicationPendingConsentTrigger().getObject());
        return factoryBean;
    }
}

注意事项

  1. 确保项目已引入Quartz依赖:
<!-- Maven依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 若之前使用@Scheduled注解配置,需替换为上述Quartz触发器配置(因为你的类继承了QuartzJobBean,更适配Quartz原生调度)。

内容的提问来源于stack exchange,提问作者Rahul SK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:21