spring集成quartz

本文介绍如何在Spring框架中集成Quartz实现定时任务管理。通过引入必要的依赖并配置Spring上下文,可以轻松创建和管理定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring本身提供了与Quartz集成的功能,需要引入Spring上下文支持模块,即spring-context-support,还需引入事务支持模块,即spring-tx,还有Quartz的包,即quartz和quartz-jobs。如下:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.23</version>
    </dependency>

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
        <version>2.2.1</version>
    </dependency>

之后需要在Spring上下文中引入要管理的Quartz Bean,如例:
QuartzScheduler.xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">

    <!-- 创建JobDetail实例的工厂Bean -->
    <bean name="exampleJob"
        class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="com.rock.mySpring.quartz.ExampleJob" />
        <property name="jobDataAsMap">
            <map>
                <entry key="timeout" value="5" />
            </map>
        </property>
    </bean>

    <bean id="exampleBusinessObject" class="com.rock.mySpring.quartz.ExampleBusinessObject" />

    <!-- 示出一个JobDetail对象,代理执行目标对象的目标方法 -->
    <bean id="jobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="exampleBusinessObject" />
        <property name="targetMethod" value="doIt" />
        <!-- 设置job非并发执行 -->
        <!-- <property name="concurrent" value="false" /> -->
    </bean>

    <!-- 创建SimpleTrigger触发器的工厂Bean -->
    <bean id="simpleTrigger"
        class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <!-- see the example of method invoking job above -->
        <property name="jobDetail" ref="jobDetail" />
        <!-- 延迟5秒执行 -->
        <property name="startDelay" value="5000" />
        <!-- 每5秒执行一次 -->
        <property name="repeatInterval" value="5000" />
    </bean>

    <!-- 创建CronTrigger触发器的工厂Bean -->
    <bean id="cronTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="exampleJob" />
        <!-- 50秒后开始,每3秒执行一次 -->
        <property name="cronExpression" value="5/1 * * * * ? " />
    </bean>

    <!-- 定义调度器,属性是触发器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="simpleTrigger" />
            </list>
        </property>
    </bean>

</beans>

相关的类:
ExampleJob.java

package com.rock.mySpring.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class ExampleJob extends QuartzJobBean {
    private int timeout;

    /**
     * Setter called after the ExampleJob is instantiated
     * with the value from the JobDetailFactoryBean (5)
     */
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("timeout = " + timeout);
    }

}

ExampleBusinessObject.java

package com.rock.mySpring.quartz;

public class ExampleBusinessObject {
    // properties and collaborators

    public void doIt() {
        // do the actual work
        System.out.println("ExampleBusinessObject.doIt");
    }


}

之后,如果是spring应用,就直接加载Spring上下文配置文件,此时定时器Quartz任务就会自动触发;如果是整合Spring的web应用,则将QuartzScheduler.xml文件引入到Spring应用上下文中,即contextConfigLocation参数中(非单个Servlet的参数),则Web应用启动后就会触发定时器Quartz任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值