一、Quartz任务调度--单机
2016-03-28 10:28
621 查看
一、Quartz任务调度--单机
Quartz是一个纯Java 实现的作业调度工具,相当于数据库中的Job、Windows 的计划任务、Unix/Linux 下的Cron,但Quartz 可以把排程控制的更精细。
可用于邮件提醒和告警。
1.简单使用
1.<!-- maven引入quartz jar包 -->
2.//普通java类
3.<!-- spring整合quartz,xml文件配置 -->
2.Cron表达式
Cron表达式包含6个必要组件和一个可选组件
特殊字符的含义
Cron表达式举例:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
3.Quartz体系结构
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述。
Quartz调度包的两个基本单元是作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。
调度器:调度器用于将触发器与作业关联,一个作业可关联多个触发器,一个触发器可用于控制多个作业,触发触发器时,全部关联的作业将获得调度。Quartz的调度器由Scheduler接口体现。
作业:只需实现org.quartz.job接口即可。Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,
Quartz确定作业运作的时候,它将调用 execute()方法体。
触发器:有SimpleTrigger和CronTrigger两种类型。
参考: http://liuzidong.iteye.com/blog/1118992
4.Spring Quartz 异常
Spring quartz常见的"Table'database.qrtz_locks' doesn't exist"异常;
原因:出现此异常,通常是因为spring配了default-autowire=byName
解决办法:bean里直接关掉autowired:autowire=no
参考: http://blog.sina.com.cn/s/blog_6151984a0100o42e.html
Quartz是一个纯Java 实现的作业调度工具,相当于数据库中的Job、Windows 的计划任务、Unix/Linux 下的Cron,但Quartz 可以把排程控制的更精细。
可用于邮件提醒和告警。
1.简单使用
1.<!-- maven引入quartz jar包 -->
<dependency> <groupId>quartz</groupId> <artifactId>quartz</artifactId> <version>1.5.2</version> </dependency>
2.//普通java类
public class UserQueryTask { public void userQuery(){ System.out.println("执行任务"); } }
3.<!-- spring整合quartz,xml文件配置 -->
<bean id="userQueryTask" class="com.taiyang.task.UserQueryTask"></bean> <bean id="userQueryTaskDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="userQueryTask"/><!-- 上面的任务对象 --> <property name="targetMethod" value="userQuery"/><!-- 方法名 --> <property name="concurrent" value="false"/> </bean> <bean id="userQueryTaskDoTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="userQueryTaskDetail"/> <property name="cronExpression" value="0 0 0 */3 * ?"/> <!-- 执行时间表达式:每三天执行一次 --> </bean> <!-- 总管理类,如果将lazy-init='false'那么容器启动就会执行调度程序 --> <bean id="startQuartz" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="userQueryTaskDoTime"/> </list> </property> </bean>
2.Cron表达式
Cron表达式包含6个必要组件和一个可选组件
位置 | 含义 | 允许的特殊字符 |
1 | 秒(0~59) | , - * / |
2 | 分(0~59) | , - * / |
3 | 小时(0~24) | , - * / |
4 | 日期(1~31) | , - * / ? L W C |
5 | 月(JAN~DEC或1~12) | , - * / |
6 | 星期(SUN~SAT或1~7) | , - * / ? L C # |
7 | 年(可选,1970~2099),若为空,表示全部时间范围 | , - * / |
特殊字符 | 说明 |
* | 通配符,任意值 |
? | 无特定值。通常和其他指定的值一起使用,表示必须显示该值但不能检查 |
- | 范围。e.g.小时部分10-12表示10:00,11:00, 12:00 |
, | 列分隔符。可以让你指定一系列的值。e.g.在星期域中指定MON、TUE和WED |
/ | 增量。表示一个值的增量,e.g.分钟域中0/1表示从0开始,每次增加1min |
L | 表示Last。它在日期和星期域中表示有所不同。在日期域中,表示这个月的最后一天,而在星期域中,它永远是7(星期六)。当你希望使用星期中某一天时,L字符非常有用。e.g.星期域中6L表示每一个月的最后一个星期五 |
W | 在本月内离当天最近的工作日触发,所谓的最近工作日,即当天到工作日的前后最短距离,如果当天即为工作日,则距离是0;所谓本月内指的是不能跨月取到最近工作日,即使前/后月份的最后一天/第一天确实满足最近工作日。e.g. LW表示本月的最后一个工作日触发,W强烈依赖月份。 |
# | 表示该月的第几个星期,e.g. 1#2表示每一个月的第一个星期一 |
C | 日历值。日期值是根据一个给定的日历计算出来的。在日期域中给定一个20C将在20日(日历包括20日)或20日后日历中包含的第一天(不包括20日)激活触发器。例如在一个星期域中使用6C表示日历中星期五(日历包括星期五)或者第一天(日历不包括星期五) |
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
3.Quartz体系结构
Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述。
Quartz调度包的两个基本单元是作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。
调度器:调度器用于将触发器与作业关联,一个作业可关联多个触发器,一个触发器可用于控制多个作业,触发触发器时,全部关联的作业将获得调度。Quartz的调度器由Scheduler接口体现。
作业:只需实现org.quartz.job接口即可。Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,
Quartz确定作业运作的时候,它将调用 execute()方法体。
触发器:有SimpleTrigger和CronTrigger两种类型。
参考: http://liuzidong.iteye.com/blog/1118992
4.Spring Quartz 异常
Spring quartz常见的"Table'database.qrtz_locks' doesn't exist"异常;
原因:出现此异常,通常是因为spring配了default-autowire=byName
解决办法:bean里直接关掉autowired:autowire=no
参考: http://blog.sina.com.cn/s/blog_6151984a0100o42e.html
相关文章推荐
- Spring3.0与Quartz的整合实现定时任务调度
- java中,下面的List怎么放入map里面,求高手!
- Java 二维维数组遍历测试
- Gradle在大型Java项目上的应用
- Spring中的调度任务quartz,以及CronExpression配置说明
- Java设计模式--原型模式
- java 动态代理机制的理解和分析
- 理解Java的static import静态引入机制
- ubuntu更改java为openjdk
- java forEach实现原理
- Spring 学习资料链接
- Java 二进制与十六进制转换
- jdk的设置及安装android studio提示does not point to a valid jvm问题
- leetcode Add Digits java语言实现
- Spring 定时任务之 @Scheduled cron表达式
- leetcode 之Nim Game java实现
- 以图搜图 - Google 相似图片搜索原理 - Java实现
- java并发库 Lock 公平锁和非公平锁
- Java与C之间的socket通信
- JavaBean,List,Map转成json格式