Spring集成Quartz定时任务框架介绍

一、增加所依赖的JAR包
1、增加Spring的Maven依赖

复制代码
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
复制代码


2、增加Quartz的Maven依赖

复制代码
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.4</version>
</dependency>
复制代码

二、增加定时业务逻辑类

复制代码
public class ExpireJobTask {
/** Logger */
private static final Logger logger = LoggerFactory.getLogger(ExpireJobTask.class);

/**
* 业务逻辑处理
*/
public void doBiz() {
// 执行业务逻辑
// ........
}
}
复制代码


ExpireJobTask业务逻辑类与一般普通的类没有任务区别,它定义的doBiz方法即为调度业务方法。

三、增加Spring配置
1、增加一个线程池

复制代码
<!-- 线程执行器配置,用于任务注册 -->
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean>
复制代码


2、定义业务逻辑处理类

<!-- 业务对象 -->
<bean id="bizObject" class="com.aboy.potak.common.toolkit.scheduling.ExpireJobTask" />


3、增加调度业务逻辑

复制代码
<!-- 调度业务 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="bizObject" />
<property name="targetMethod" value="doBiz" />
</bean>
复制代码


上面的配置中,我们以bizObject.doBiz方法为将要调度的业务执行逻辑。
4、增加调度触发器

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="10 0/1 * * * ?" />
</bean>


Cron表达式“10 */1 * * * ?”意为:从10秒开始,每1分钟执行一次。

复制代码
<bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="60000" />
</bean>
复制代码


该调度表示,延迟10秒启动,然后每隔1分钟执行一次。
5、增加调度

复制代码
<!-- 设置调度 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>
复制代码


triggers属性中,我们可以增加多个触发器。

到此,Spring已经与Quartz完美的结合了,我们接下来的工作就是启动系统,开始调度了。

四、Cron表达式的详细用法
字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * /

例子:
0/5 * * * * ? : 每5秒执行一次

“*”字符被用来指定所有的值。如:"*"在分钟的字段域里表示“每分钟”。 
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。

“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。

“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。

“/”字符用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。

L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。

字符“W”只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。

“L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。

字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。

字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。

五、表达式举例
"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期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"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" 每月的第三个星期五上午10:15触发

转载于:https://www.cnblogs.com/zhengwuchao/p/8117699.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

检测机安装mysql_centos安装mysql的正确方法

1、官方安装文档2、下载 Mysql yum包下载到本地再上传到服务器&#xff0c;或者使用wget 直接下载wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm3、安转软件源将platform-and-version-specific-package-name 替换为你下载的rpm名sudo rpm -Uvh plat…

再次分享一个多选文件上传方案

多选文件上传&#xff0c;已经非常多了&#xff0c;选择性多了可能有时候要比较下哪个更合适&#xff0c;结合到项目中使用更方便才是最重要的。很多的多选上传基本上都是调用的swf文件&#xff0c;确实用flash 或flex开发一个多选上传的功能很方便&#xff0c;比如flex里内置的…

2017软件工程实践总结

一、请回望暑假时的第一次作业&#xff0c;你对于软件工程课程的想象 1&#xff09;对比开篇博客你对课程目标和期待&#xff0c;“希望通过实践锻炼&#xff0c;增强计算机专业的能力和就业竞争力”&#xff0c;对比目前的所学所练所得&#xff0c;在哪些方面达到了你的期待和…

mysql use mysql_1、设置mysql远程访问执行mysql 命令进入mysql 命令模式,执行如下SQL代码mysql use mysql; mysql GRANT ALL ON ...

1、设置mysql远程访问执行mysql 命令进入mysql 命令模式&#xff0c;执行如下SQL代码mysql> use mysql;mysql> GRANT ALL ON *.* TO admin% IDENTIFIED BY admin WITH GRANT OPTION;# 这句话的意思 &#xff0c;允许任何IP地址(上面的 % 就是这个意思)的电脑 用admin帐户…

HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息

HTTP 头部解释 1. Accept&#xff1a;告诉WEB服务器自己接受什么介质类型&#xff0c;*/* 表示任何类型&#xff0c;type/* 表示该类型下的所有子类型&#xff0c;type/sub-type。2. Accept-Charset&#xff1a; 浏览器申明自己接收的字符集Accept-Encoding&#xff1a; 浏览…

shell编辑crontab任务

crontab是Linux下执行定时任务的工具&#xff0c;之前偶尔需要用到时都是通过执行crontab -e命令或者通过root身份直接编辑/etc/cron.*/下的文件来添加定时任务。这段时间遇到了需要通过shell来自动添加或删除crontab的需求。在shell中无法通过crontab -e来与crontab编辑器交互…

条码生成代码(Code39码)

zryou 的 条码生成代码(Code39码)『Code 39条形码介绍』 code39条码能表示字母、数字和其它一些符号共43个字符&#xff1a;A -Z, 0-9, -.$/ %, space等&#xff0c;其主要特点如下&#xff1a;  ◆条码的长度是可变化的   ◆通常用“*”号作为起始、终止符   ◆校验码不…

mysql那些事(6) WHERE条件 字符串的引号

前言&#xff1a;所谓的坑&#xff0c;两个意思&#xff0c;一个是软件本身的bug&#xff0c;一个是使用者常犯的错误。 phper在日常开发中经常和mysql打交道。特别是在没有分层的中小应用中&#xff0c;phper开发要关注sql语句的实现。 入正题&#xff0c;上建表语句&#xff…

mysql延迟关联为什么快_MySQL 覆盖索引与延迟关联详解

本期来谈谈覆盖索引与延迟关联。在此之前&#xff0c;我们先简单建立一个订单表 Orders 用于举例说明。表中共包含 3 个字段&#xff1a;idintproduct_idnameCREATETABLEordersidint10NOTNULLCOMMENT订单 IDproduct_idint10DEFAULTNULLCOMMENT商品 IDnamevarchar255CHARACTERSE…

学一下Unix/C啊

发信人: Winmine (挖地雷), 信区: Career_Upgrade标 题: Oracle(原bea)研发中心Tuxedo组&#xff0c;招Unix/C人才发信站: 水木社区 (Mon Apr 11 13:28:06 2011), 站内工作地点在中关村软件园&#xff0c;西二旗附近。要求至少2年相关工作经验----但一般来说&#xff0c;除非您…

Qt使用信号与槽时出现的错误“Incompatible sender/receiver arguments”

在学习使用qt的过程中&#xff0c;没有好好的去了解信号与槽的机制&#xff0c;导致出现了这么一段代码&#xff1a; connect(timer1, SIGNAL(timeout()), this, SLOT(exeMonitor(QString))); 在编译时没有出现错误&#xff0c;但当触发该信号时输出框显示&#xff1a; 即&…

mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) return 1; else return k*fac(k-1); }/*递归求阶乘*/ void main() { int i=1; for(i;i=5;i++) { fac(i);/*调用函数计算阶乘*/…

《大话数据结构》第9章 排序 9.3 冒泡排序(上)

9.3.1 最简单排序实现 无论你学习哪种编程语言&#xff0c;在学到循环和数组时&#xff0c;通常都会介绍一种排序算法来作为例子&#xff0c;而这个算法一般就是冒泡排序。并不是它的名称很好听&#xff0c;而是说这个算法的思路最简单&#xff0c;最容易理解。因此&…

简易js模板引擎

前阵子参考别人的文章自己理解了一下模板引擎的实现&#xff0c;虽然是照着敲了一边&#xff0c;但是自己也加深了理解吧。 原文链接 自己的代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><ti…

五款常用邮件管理系统评测

以邮件为主要沟通媒介的外贸企业&#xff0c;对邮件的依赖性可以说已经达到不能或缺的地步。软件厂商们深谙这一定律&#xff0c;为外贸企业提供了种类庞大的软件系统以供选择。以下笔者抽出其中五款使用较为普遍的邮件管理系统&#xff0c;根据其性能、系统稳定性、性价比等方…

for each java_Java 实例 - for 和 foreach循环使用

Java 实例 - for 和 foreach循环使用for 语句比较简单&#xff0c;用于循环数据。for循环执行的次数是在执行前就确定的。语法格式如下&#xff1a;for(初始化; 布尔表达式; 更新) {//代码语句}foreach语句是java5的新特征之一&#xff0c;在遍历数组、集合方面&#xff0c;for…

EditPlus 注册码在线生成

虽然editplus现在不常用&#xff0c;但是它轻便&#xff0c;我还是很喜欢的&#xff0c;推荐一个注册码生成器&#xff0c;真是好好用 http://www.jb51.net/tools/editplus/ 点击链接输入自己想要的用户名&#xff0c;就能自动生成了&#xff0c;相当方便。转载于:https://www.…

如何启用 Ubuntu 中的 root 帐号

执行下面的操作&#xff1a; sudo passwd root 此命令将会重新设置 root 的密码&#xff0c;按照提示输入新的密码&#xff0c;并加以确认。 之后&#xff0c;重启系统时&#xff0c;就可以用 root 登录了。 如果你想要禁用 root 帐号&#xff0c;则执行下列命令&#xff1a; …

java代码块的定义_Java几种代码块的定义与常见问题

Java几种代码块的定义与常见问题代码块&#xff0c;通俗的说就是用一对“{}”括起来的一段代码&#xff0c;代码块可以根据位置分为以下几类&#xff1a;局部代码块&#xff1a;局部代码块就是指直接在方法或是语句中定义的代码块&#xff0c;请看如下范例&#xff1a;package …

gradle各版本下载地址

gradle各版本下载地址 原创 2016年08月16日 11:17:25标签&#xff1a;gradle更新 /android studio59713gradle各版本下载地址&#xff1a;http://services.gradle.org/distributions 以前都是手动下载gradle的文件&#xff0c;然后修改的&#xff0c;今天想从一些博客网站上下载…