几年前接触了一下quartz,现在再用的时候忘了,所以网上搜了些资料,这个quartz任务调度开源框架还挺好用的。我把例子贴一下,以备自己下次用的时候查阅。
1、简单的quartz应用 SimpleTrigger
第一步,下载quartz包。我用的是quartz-all-1.6.4.jar这个版本
第二步,新建一个project,java project 或者 web project 都可以的。
第三步,写个简单的类继承Job,java代码块贴一下:
package com.zhangxy;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleJob implements Job {
public void execute(JobExecutionContext jobCtx)
throws JobExecutionException {
System.out.println(jobCtx.getTrigger().getName()
+ " triggered. time is:" + (new Date()));
}
}
第四步,写个触发器,里面就有一个main方法
package com.zhangxy;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleTriggerRunner {
public static void main(String args[]) {
try {
// ①创建一个JobDetail实例,指定SimpleJob
JobDetail jobDetail = new JobDetail("job1_1", "jGroup1",
SimpleJob.class);
// ②通过SimpleTrigger定义调度规则:马上启动,每2秒运行一次,共运行10次
SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1_1",
"tgroup1");
simpleTrigger.setStartTime(new Date());
simpleTrigger.setRepeatInterval(2000);
simpleTrigger.setRepeatCount(10);
// ③通过SchedulerFactory获取一个调度器实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, simpleTrigger);// ④ 注册并进行调度
scheduler.start();// ⑤调度启动
} catch (Exception e) {
e.printStackTrace();
}
}
}
第五步,运行该main方法。控制台每隔两秒钟就会输出trigger1_1 triggered. time is:Thu Apr 14 17:30:30 CST 2011,十次就结束了。
2、基于表达式 CronTrigger 支持重复的时间间隔(如每月某天定时执行)
第一、二、三步同第一相同
第四步:
package com.zhangxy;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class CronTriggerRunner {
public static void main(String args[]) {
try {
JobDetail jobDetail = new JobDetail("job1_2", "jGroup1",
SimpleJob.class);
// ①-1:创建CronTrigger,指定组及名称
CronTrigger cronTrigger = new CronTrigger("trigger1_2", "tgroup1");
CronExpression cexp = new CronExpression("0/5 * * * * ?");// ①-2:定义Cron表达式
cronTrigger.setCronExpression(cexp);// ①-3:设置Cron表达式
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
// ②
} catch (Exception e) {
e.printStackTrace();
}
}
}
第五步,运行main函数,控制台会每隔5秒输出trigger1_2 triggered. time is:Thu Apr 14 17:32:15 CST 2011
Cron表达式可以设置时刻,由六位或者7位组成 中间是用空隔隔开 每位都用指定字符表达。第一位是秒,第二位是分钟,第三位是小时,第四位日期,第五位月份,第六位星期,第七位年(可以写也可以不写)。如:0 0 12 * * ?代表每天12点执行,0 55 23 L * ?代表每个月最后一天23点55分执行。
位置
时间域名
允许值
允许的特殊字符
位置
|
时间域名
|
允许值
|
允许的特殊字符
|
1
|
秒
|
0-59
|
, - * /
|
2
|
分钟
|
0-59
|
, - * /
|
3
|
小时
|
0-23
|
, - * /
|
4
|
日期
|
1-31
|
, - * ? / L W C
|
5
|
月份
|
1-12
|
, - * /
|
6
|
星期
|
1-7
|
, - * ? / L C #
|
7
|
年(可选)
|
空值1970-2099
|
, - * /
|
Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:
●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;
●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;
●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;
●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;
●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;
●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围;
●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;
● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。
Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。
3.spring集成quartz应用
第一步,下载包quartz-all-1.6.4.jar 、 spring.jar 、commons-collections-3.1.jar、 commons-logging.jar、 log4j-1.2.15.jar
第二步,新建一个web project
第三步,写个简单的处理任务的类DemoJob,java代码块贴一下:
package com.zhangxy;
import java.util.Date;
public class DemoJob {
public void doProcess() throws Exception {
System.out.println("spring demojob triggered. time is:" + (new Date()));
}
}
第二步,在web.xml中配置一下spring相关代码:
<!-- Spring2.5的编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring-Context loader -->
<display-name>Struts Shop Project</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/*.xml</param-value>
</context-param>
<!--Spring ApplicationContext 载入 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
第三步,新建applicationContext.xml,代码贴一下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 配置业务 -->
<bean id="demoJob" class="com.zhangxy.DemoJob" />
<!-- 配置作业 -->
<bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="demoJob" />
<property name="targetMethod" value="doProcess" />
</bean>
<!-- 配置触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="methodInvokingJobDetail" />
<property name="cronExpression">
<value>0 0 12 * * ?</value><!-- 每天12点执行一次 -->
<!--<value>0 55 23 L * ?</value> --><!-- 每月最后一天 23点55分执行一次 -->
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
</beans>
第四步,部署project并启动tomcat
控制台会在指定的时间输出spring demojob triggered. time is:Thu Apr 14 12:00:00 CST 2011
一个简单的spring+quartz的demo就完成了
分享到:
相关推荐
NULL 博文链接:https://aiappfine.iteye.com/blog/299528
Quartz的原理简介,可以实现任务的调度和定时的添加,在文中给了基础的使用方法的代码展示!!!!
NULL 博文链接:https://fanshuyao.iteye.com/blog/2392350
quartz学习总结 本文使用一系列代码示例介绍 Quartz.NET API,演示它的机制,例如作业、触发器、作业仓库。 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API
Quartz调度框架应用总结
总结了quartz调度中的一些使用情况
使用Quartz.net组件自动执行程序,c#程序,内含dll文件+文档解释+源码 自己总结的,很好用,建议下载
博文链接:https://daoger.iteye.com/blog/195486
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169156
NULL 博文链接:https://baobeituping.iteye.com/blog/799324
Quartz定时任务常用的11张数据库脚本表结构,网上大部分都是只是说说,没有实际帮助,有的大部分积分还很贵,本人总结一下,希望能给有需要的人一些帮助。
Quartz框架介绍,环境搭建以及例子详细解释
Spring中Quartz的配置[总结].pdf
10_知识点检测与小结.mp4 11_Elastic-Job框架介绍.mp4 12_初识Elastic-Job.mp4 13_急速入门Simple-1.mp4 14_急速入门Simple-2.mp4 15_急速入门dataflow.mp4 16_急速入门script.mp4 17_知识点检测与小结.mp4 18_...
源码与竞赛资料:教育部认可的大学生竞赛备赛资料代码、源码、竞赛总结。 功能与质量保证:这个资源库是一个宝贵的学习平台,有助于他们深入了解计算机技术的原理和应用。这些源码经过测试和验证,可以直接运行,...
第一部分 Spring基础 第1章 开始Spring之旅 1.1 为什么使用Spring 1.1.1 J2EE开发者的一天 1.1.2 Spring的承诺 1.2 Spring是什么 ... 1.5.2 AOP使用 ... 1.7 小结 ... 11.6 小结
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.4.2aop使用 ...1.5小结 ...2.1.2使用应用上下文 ...2.3.2使用其他的bean ...2.4.2混合使用自动和手动装配 ...b.4小结