dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(九)之 spring中定时器quartz的整合

释放双眼,带上耳机,听听看~!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/54930240

今天来总结一下。Spring中quartz的使用。

1、Quartz是什么?

Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。

2、Quartz的分类

2.1、按照作业类的继承方式来分,可以分为两类

  1. 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
  2. 作业类即普通的java类,不需要继承自任何基类。

注意:推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。

2.2、按照任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean

每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean

注意:并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。

3、添加Quartz依赖


1
2
3
4
5
6
7
1<!-- 定时器的使用 -->
2            <dependency>
3                <groupId>org.quartz-scheduler</groupId>
4                <artifactId>quartz</artifactId>
5                <version>2.2.3</version>
6            </dependency>
7

4、Spring中quartz的使用(作业类即普通的java类的使用)

4.1、定义作业类


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1package com.lidong.dubbo.core.util.quartz;
2
3import java.text.SimpleDateFormat;
4import java.util.Date;
5
6import org.slf4j.Logger;
7import org.slf4j.LoggerFactory;
8
9/**
10 * @项目名称:lidong-dubbo
11 * @类名:SpringQtz
12 * @类的描述: 作业类的调度
13 * @作者:lidong
14 * @创建时间:2017/2/8 下午5:41
15 * @公司:chni
16 * @QQ:1561281670
17 * @邮箱:lidong1665@163.com
18 */
19public class SpringQtz  {  
20
21    static Logger  logger = LoggerFactory.getLogger(SpringQtz.class);
22    private static int counter = 0;
23
24    /**
25     * 调度的方法
26     */
27    public   void execute()  {
28        long ms = System.currentTimeMillis();  
29        logger.info(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(ms))+"  "+"(" + counter++ + ")");  
30    }  
31}  
32

4.2、在Spring中配置作业类


1
2
3
4
1<!-- 要调用的工作类 -->
2    <bean id="SpringQtzJob" class="com.lidong.dubbo.core.util.quartz.SpringQtz" />
3
4

4.3 、定义调用对象和方法


1
2
3
4
5
6
7
8
9
10
11
12
13
1<!-- 定义调用对象和调用对象的方法 -->
2    <bean id="SpringQtzJobMethod"
3        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
4        <!-- 调用的类 -->
5        <property name="targetObject">
6            <ref bean="SpringQtzJob" />
7        </property>
8        <!-- 要执行的方法名称 -->
9        <property name="targetMethod">
10            <value>execute</value>
11        </property>
12    </bean>
13

4.4、配置调度触发器


1
2
3
4
5
6
7
8
9
1<!-- ======================== 调度触发器 ======================== -->
2    <bean id="CronTriggerBean"
3        class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
4        <!--作业详情 -->
5        <property name="jobDetail" ref="SpringQtzJobMethod"></property>
6        <!-- cron表达式 -->
7        <property name="cronExpression" value="0/10 * * * * ?"></property>
8    </bean>
9

4.5、配置调度工厂


1
2
3
4
5
6
7
8
9
10
11
12
1<!-- ======================== 调度工厂 ======================== -->
2    <bean id="SpringJobSchedulerFactoryBean"
3        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
4        <property name="triggers">
5            <list>
6                <ref bean="CronTriggerBean" />
7                <ref bean="CronTriggerBean1" />
8            </list>
9        </property>
10    </bean>
11
12

5、quartz的cron 表达式

一个cron表达式至少有6个,是按照空格来分割的时间元素。
按照顺序为:

  1. 秒 0-59
  2. 分钟 0-59
  3. 小时 0-23
  4. 天 (月)1-31
  5. 月 0-31
  6. 天 (星期)1-7

年份 1970- 递增

给几个例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2"30 * * * * ?" 每半分钟触发任务
3"30 10 * * * ?" 每小时的10分30秒触发任务
4"30 10 1 * * ?" 每天1点10分30秒触发任务
5"30 10 1 20 * ?" 每月20号1点10分30秒触发任务
6"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
7"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
8"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
9"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
10"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
11"15-45 * * * * ?" 15到45秒内,每秒都触发任务
12"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
13"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
14"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
15"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
16"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
17"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
18"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
19"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务
20
21

基本上就这么多了。

代码地址:

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索