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

Spring 整合 Quartz 任務排程實戰:Job 與 Trigger 配置詳解

     編輯:Java 相關知識

前言:Spring 簡化 Quartz 配置的聲明式優勢

Spring 提供 org.springframework.scheduling.quartz 套件,以 Bean 定義方式配置 Quartz Job、Trigger 與 Scheduler,避免硬編碼,支援依賴注入,極大簡化排程任務管理。

核心 Bean 定義

1. JobDetailBean:定義排程作業

<bean id="mainJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="jobs.MainJob"/> <!-- 實作 QuartzJobBean 的類別 -->
  <property name="jobDataAsMap"> <!-- 注入資料 -->
    <map>
      <entry key="data" value="data"/>
    </map>
  </property>
</bean>

2. SimpleTriggerBean:簡單觸發器

<bean id="mainTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <property name="jobDetail" ref="mainJob"/>
  <property name="startDelay" value="6000"/> <!-- 啟動 6 秒後首次執行 -->
  <property name="repeatCount" value="0"/> <!-- 0 表示無限重複 -->
  <property name="repeatInterval" value="3600000"/> <!-- 每小時執行一次 -->
</bean>

3. SchedulerFactoryBean:排程器工廠

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="quartzProperties">
    <props>
      <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
      <prop key="org.quartz.threadPool.threadCount">10</prop>
      <prop key="org.quartz.threadPool.threadPriority">5</prop>
      <prop key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">true</prop>
    </props>
  </property>
  <property name="triggers">
    <list>
      <ref bean="mainTrigger"/> <!-- 可註冊多個觸發器 -->
    </list>
  </property>
</bean>

作業實作類別

public class MainJob extends QuartzJobBean {
  private Logger logger = Logger.getLogger(getClass());

  @Override
  protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    logger.debug("Just say hi."); // 實際業務邏輯
  }
}

繼承 QuartzJobBean 而非直接實作 Job,可享受 Spring 依賴注入與 jobDataAsMap 自動綁定。

關鍵配置說明

屬性說明
startDelay啟動延遲(毫秒),避免應用啟動期資源爭用
repeatCount重複次數,0=無限,>0 為具體次數
repeatInterval重複間隔(毫秒)
jobDataAsMap傳遞給作業的資料,在 executeInternal 透過 context.getJobDetail().getJobDataMap() 取得
quartzProperties對應 quartz.properties 設定,執行緒池等核心參數

啟動驗證

應用啟動後,Spring 自動初始化 Scheduler、註冊 Trigger、啟動排程。日誌將顯示作業按間隔執行。

進階提示

  • 使用 CronTriggerBean 實現行事曆式排程
  • SchedulerFactoryBean 支援 jobDetails 屬性直接註冊作業(無需 Trigger)
  • 叢集環境需配置 JDBCJobStore 並設定 org.quartz.scheduler.instanceId=AUTO
  • 作業需事務支援時,可結合 Spring @Transactional 或程式式事務管理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved