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

Spring 定時任務完整實現指南:從代碼到配置的詳細教程

     編輯:Java 程式設計入門

Spring 定時任務實現方案

在企業級 Java 應用開發中,定時任務是常見需求。本文詳細介紹如何使用 Spring 框架整合 Quartz 調度器實現定時任務,包含完整的代碼示例、配置說明及 Cron 表達式參考。

核心任務類實現

首先創建一個執行具體業務邏輯的任務類:

import org.apache.log4j.Logger;

public class TaskJob {
    private static final Logger log = Logger.getLogger(TaskJob.class);

    public void sayHello() {
        try {
            log.info("處理任務開始...");
            // 業務邏輯代碼調用
            System.out.println("時間[" + new java.util.Date().toLocaleString() + "]----->大家好啊!");
            log.info("處理任務結束!");
        } catch (Exception e) {
            log.error("處理任務出現異常", e);
        }
    }
}

Spring XML 配置詳解

在 Spring 配置文件中定義任務 Bean、JobDetail、觸發器及調度器:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "https://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- 1. 定義任務 Bean -->
    <bean name="taskJob" class="util.TaskJob" />

    <!-- 2. 使用 MethodInvokingJobDetailFactoryBean 包裝目標方法 -->
    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="taskJob" />
        </property>
        <property name="targetMethod">
            <value>sayHello</value>
        </property>
    </bean>

    <!-- 3. 配置 Cron 觸發器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="methodInvokingJobDetail" />
        </property>
        <!-- 每天 08:00 到 21:00 每分鐘觸發 -->
        <property name="cronExpression">
            <value>0 * 08-21 * * ?</value>
        </property>
    </bean>

    <!-- 4. 配置調度器工廠 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="cronTrigger" />
            </list>
        </property>
    </bean>
</beans>

測試類與 Web 環境部署

獨立應用測試:

package util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestApp {
    public static void main(String[] args) {
        System.out.println("加載 Spring 配置文件....");
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("加載配置文件完畢!");
    }
}

Web 專案部署需在 web.xml 中添加:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Cron 表達式完整參考表

字段允許值允許特殊字符
秒0-59, - * /
分0-59, - * /
小時0-23, - * /
日期1-31, - * ? / L W C
月份1-12 或 JAN-DEC, - * /
星期1-7 或 SUN-SAT, - * ? / L C #
年(可選)留空, 1970-2099, - * /

常用 Cron 表達式範例

  • 0 0 12 * * ? - 每天中午 12 點觸發
  • 0 15 10 ? * * - 每天上午 10:15 觸發
  • 0 * 14 * * ? - 每天下午 2 點到 2:59 每分鐘觸發
  • 0 0/5 14 * * ? - 每天下午 2 點到 2: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 觸發

關鍵配置說明

  1. MethodInvokingJobDetailFactoryBean:將普通 Java 方法包裝為 Quartz 可識別的 JobDetail
  2. CronTriggerBean:基於 Cron 表達式的觸發器,支援複雜的時間排程
  3. SchedulerFactoryBean:Quartz 調度器的 Spring 整合工廠,負責啟動調度器並註冊觸發器
  4. cronExpression:核心配置,定義任務執行的時間規則

掌握這套配置後,即可在 Spring 應用中靈活實現各類定時任務需求,如數據備份、報表生成、郵件發送等定時業務處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved