首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 整合 Quartz 定時任務完整配置:CronTrigger 運算式詳解與常用範例

     編輯:Java 相關知識

前言

Quartz 是企業級 Java 定時任務框架,支援 Cron 運算式、集群、持久化。本文以 Spring XML 配置為例,詳細說明 JobDetail、Trigger、SchedulerFactoryBean 整合與 Cron 運算式語法。

1. Spring XML 配置範例

<!-- 1. 任務邏輯 Bean -->
<bean id="bcdTask" class="com.tmp.task.BcdTask" />

<!-- 2. JobDetail:指定調用對象與方法 -->
<bean id="tmpJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="bcdTask" />
    <property name="targetMethod" value="tmpWork" />
</bean>

<!-- 3. CronTrigger:定義排程 -->
<bean id="tmpTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="tmpJob" />
    <property name="cronExpression" value="0 10/5 * * * ?" /> <!-- 每分鐘第 10 秒開始每 5 秒 -->
</bean>

<!-- 4. Scheduler 工廠 -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="startupDelay" value="60" /> <!-- 應用啟動 60 秒後啟動排程 -->
    <property name="triggers">
        <list><ref bean="tmpTrigger" /></list>
    </property>
</bean>

2. Cron 運算式語法詳解

格式:秒 分 時 日 月 週 [年](6 或 7 域)

域允許值特殊字符
秒0-59, - * /
分0-59, - * /
時0-23, - * /
日1-31, - * / L W
月1-12 / JAN-DEC, - * /
週1-7 / SUN-SAT, - * / L #
年(可選)1970-2099, - * /

特殊字符含義

  • *:所有值
  • ?:無具體值(僅日/週互斥時用)
  • -:範圍,如 10-12
  • ,:列表,如 MON,WED,FRI
  • /:增量,0/15 表示 0,15,30,45
  • L:Last,日域=月末,週域=週六
  • W:工作日,最近的工作日
  • #:第 N 個週X,如 6#3 = 第 3 個週五

3. 常用 Cron 範例速查

運算式含義
0 0 12 * * ?每天中午 12:00
0 15 10 ? * *每天 10:15
0 0/5 14 * * ?每天 14:00-14:55 每 5 分鐘
0 15 10 ? * MON-FRI週一至週五 10:15
0 15 10 15 * ?每月 15 號 10:15
0 15 10 L * ?每月最後一天 10:15
0 15 10 ? * 6L每月最後一個週五 10:15
0 15 10 ? * 6#3每月第三個週五 10:15

4. 進階:持久化與集群

<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
            <prop key="org.quartz.jobStore.isClustered">true</prop>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
        </props>
    </property>
    <property name="triggers">
        <list><ref bean="tmpTrigger" /></list>
    </property>
</bean>

5. Spring Boot 現代寫法

@Configuration
@EnableScheduling
public class QuartzConfig {
    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(MyJob.class).storeDurably().build();
    }
    
    @Bean
    public Trigger trigger(JobDetail jobDetail) {
        return TriggerBuilder.newTrigger()
            .forJob(jobDetail)
            .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?"))
            .build();
    }
}

@Component
public class MyJob extends QuartzJobBean {
    @Override protected void executeInternal(JobExecutionContext ctx) {
        // 任務邏輯
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved