Spring4.2.3与Quartz2.3执行定时任务整合

Spring4.2.3与Quartz2.3执行定时任务整合

Quartz(介绍)

Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。
Quartz 允许程序开发人员根据时间的间隔来调度作业。
Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

应用场景

需要定时统计业务数据,比如说对今日数据信息的定时更新,统计今天员工的打卡情况。

如何使用

首先我们引入Quartz2.3相应的依赖:(Spring4.2.3相关的依赖我不再介绍)

<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz-jobs</artifactId>
  <version>2.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.2.3</version>
</dependency>

创建一个定时任务

添加对应的包和测试类
测试类中具体的内容

在applicationContext文件中配置

Spring配置文件applicationContext.xml中配置了要注入的bean, 定时任务, 任务执行周期时间等。下面注释部分因格式问题。

<bean name="job1" class="com.baizhi.quartz.TestDemo"/> 配置刚刚写的Demo类
//设置调度任务
<bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    // 注入需要执行定时的目标类
    <property name="targetObject">
        //与TestDemo类的ID一致
        <ref bean="job1"/>
    </property>
    //需要执行定时任务的那个方法
    <property name="targetMethod">
        <value>method</value>
    </property>
    <property name="concurrent" value="false"></property>
</bean>
<!-- 创建第一个任务-->
<bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail">
        <ref bean="jobDetail_1"></ref>
    </property>
    <!-- 设置执行时间,当前设置是每1秒执行一次,-->
    <property name="cronExpression">
        <value>0/1 * * * * ?</value>
    </property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <!-- 添加触发器 -->
    <property name="triggers">
        <list>
            <ref bean="cronTrigger_1" />
        </list>
    </property>
</bean>

applicationContext文件中配置图如下:

上半部分:

上半部分
下半部分:
下半部分

启动项目运行程序结果如下:

在这里插入图片描述
我们写的demo执行了1s刷新一次的功能.

设置定时刷新时间的语法

这些星号由左到右按顺序代表 : * * * * * * *
格式: [秒] [分] [小时] [日] [月] [周] [年]
常用示例:
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发 (特殊情况,在一个时间设置里,执行两次或 两次以上的情况)
0 59 2 ? * FRI 每周5凌晨2点59分触发;
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 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次

关于踩坑问题

小编也是翻了很多的博客,用了半天的时间进行各种的测试,总结出来的,希望和大家一块探讨问题,有什么疑问的可以在下方留言,互相探讨学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值