Spring 集成 quartz

本文介绍如何在Spring框架中集成Quartz实现定时任务,包括定义任务执行类、引入依赖包、配置XML文件等内容,并提供了Cron表达式的详细解释。

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

1.定义任务执行类:

例:

public class QuartzUtil {


    private void runJob() {
        System.out.println("任务执行内容");
    }
}

2.引入 spring quartz 核心包:spring-context-support-*.*.*.RELEASE.jar;及 quartz 包:quartz-*.*.*.jar,quartz-jobs-*.*.*.jar(版本自己取舍);

现在一般都采用 maven 构建项目,提供一下 maven jar 地址:

spring quartz 核心包:

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

quartz:

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

3.配置 spring 集成 quartz 的 xml 内容:

    <!-- 1.定义执行任务类 -->
    <bean id="quartzJob" class="任务执行类路径" />

    <!-- 2.定义任务器 -->
    <bean id="jobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="任务执行类 bena ID" />
        <property name="targetMethod" value="任务需要执行的方法" />

        <!-- 是否支持并发 false 不支持 -->
        <property name="concurrent" value="false" />
    </bean>

    定时任务触发器分两种:

    1.SimpleTrigger :周期性触发器

        <!-- 3.定义周期性定时触发器 -->
<bean id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<!-- 需要执行的任务 -->
<property name="jobDetail" ref="jobDetail" />
<!-- 延迟开始 -->
<property name="startDelay" value="1000" />
<!-- 执行间隔 -->
<property name="repeatInterval" value="3000" />
</bean>

    2.CronTrigger:复杂触发器

        <!-- 3.定义复杂触发器(触发时间点使用Cron表达式定义) -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0 0 1 * * ?" />
</bean>

    <!-- 4.注册任务器和触发器到 schedule 中 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger" />
                <!-- <ref bean="cronTrigger" /> -->
            </list>
        </property>
    </bean>

5.启动项目。

注意事项:

1.让容器加载 quartz 内容。若为单独文件。需要在web.xml内添加

     例:

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/quartz.xml</param-value>

</context-param>

2.

在<Beans>中不能够设置default-lazy-init="true",否则定时任务不触发,如果不明确指明default-lazy-init的值,默认是false。
在<Beans>中不能够设置default-autowire="byName"的属性,否则后台会报org.springframework.beans.factory.BeanCreationException错误,

这样就不能通过Bean名称自动注入,必须通过明确引用注入。

说明:

1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

字段名 允许的值 允许的特殊字符

秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日 1-31 , - * ? / L W C 
月 1-12 or JAN-DEC , - * / 
周几 1-7 or SUN-SAT , - * ? / L C # 
年 (可选字段) empty, 1970-2099 , - * /

  “?”字符:表示不确定的值

   “,”字符:指定数个值

   “-”字符:指定一个值的范围

   “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

   “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

   “W”字符:指定离给定日期最近的工作日(周一到周五)

   “#”字符:表示该月第几个周X。6#3表示该月第3个周五
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2)Cron表达式范例:

    每隔5秒执行一次:*/5 * * * * ?

    每隔1分钟执行一次:0 */1 * * * ?

    每天23点执行一次:0 0 23 * * ?

    每天凌晨1点执行一次:0 0 1 * * ?

    每月1号凌晨1点执行一次:0 0 1 1 * ?

    每月最后一天23点执行一次:0 0 23 L * ?

    每周星期天凌晨1点实行一次:0 0 1 ? * L

    在26分、29分、33分执行一次:0 26,29,33 * * * ?

   每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜七天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值