Quartz任务调度器及其在Spring中的使用
2015-01-29 17:48
567 查看
一、原生的quartz框架的使用:
1.导入jar包:可以去quartz官网下载2.创建Java类,实现Job接口中的execute方法
package com.wzj.prototype.task; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 自定义任务类 */ public class MyJob implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("起床啦~"); } }
3.测试类中代码如下:
package com.wzj.prototype.test; import java.util.Calendar; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.calendar.HolidayCalendar; import com.wzj.prototype.task.MyJob; public class PrototypeDemo { /** * @param args * @throws SchedulerException */ public static void main(String[] args) throws SchedulerException { /** * 一、创建调度器 * 用来绑定触发器和任务,任务调度离不开这三个对象:任务、触发器、调度器 */ Scheduler scheduler=new StdSchedulerFactory().getScheduler(); /** * 二、创建JobDetail任务对象 * 1.使用JobBuilder.newJob()方法创建JobBuilder对象 * 2.ofType():指定任务 的类型 * 3.withIdentity():为任务指定标识,便于管理 * param1:任务的名称 * param2:任务所在组 * 4.build():构建JobDetail对象 */ JobDetail jobDetail=JobBuilder.newJob() .ofType(MyJob.class) .withIdentity("myJob", "myJobGroup") .build(); /** * 三、 创建Trigger触发器,即时间规则,分为SimpleScheduleBuilder和CronScheduleBuilder * 1.startNow():立即开始,其中还包含很多开始的方法,可以自行查看 * 2.withSchedule():以什么规则定义触发器 * SimpleScheduleBuilder中提供了多种静态方法,按照时、分、秒等方式定义,这里的参数: * param1:总共执行10次 * param2:每3秒执行一次 */ Trigger simpleTrigger=TriggerBuilder.newTrigger() .startNow() .withIdentity("trigger","triggerGroup") .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(10, 3)) .build(); /** * 使用调度器绑定并启动调度器 */ scheduler.scheduleJob(jobDetail, simpleTrigger); scheduler.start(); } }
输出结果:打印了10次“起床啦~”
4.使用CronScheduleBuilder定义时间规则:
Trigger cronTrigger=TriggerBuilder.newTrigger() .startNow() .withIdentity("trigger2", "triggerGroup") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 44 16 29 1 ? 2015")) .build();
使用CronScheduleBuilder只需要定义好Cron表达式就可以了,即方法中传递的字符串。Cron表达式由6~7个由空格分隔的时间元素组成,第7个元素可选
欲了解更详细,参见百度文库:http://wenku.baidu.com/link?url=vLPUSfBOmRUXE6PwKcPw0UZaHtSdtbeVW0QpVw8cuCV9J04jrLNW_2WNKbUf3xs-l1bwLDtOMnjLT3Cyppx7THess6O3DY2oqQcPHkjlPk_
SimpleScheduleBuilder和CronScheduleBuilder的区别:
触发器 | 应用场景 | 使用方式 |
---|---|---|
SimpleTrigger | 固定时间间隔的调度任务(例如:每隔2小时执行1次) | 通过设置触发器的属性:开始时间、结束时间、重复次数、重复间隔等 |
CronTrigger | 指定时间点的调度任务(例如:每天凌晨1:00执行1次) | 通过定义Cron表达式 |
如果有时候比如10月1日——国庆节,我们不想让这个任务执行,此时就要排除掉这个特殊的日期
代码如下:
public static void main(String[] args) throws SchedulerException { //省略其他 //创建一个java.util.Calendar日历类,并设置日期时间 Calendar calendar=Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.OCTOBER); calendar.set(Calendar.DATE, 1); //创建假期日历,用来排除以上的时间 HolidayCalendar holiday=new HolidayCalendar(); holiday.addExcludedDate(calendar.getTime()); //在调度器中注册 scheduler.addCalendar("guoQing", holiday, true, true); Trigger simpleTrigger=TriggerBuilder.newTrigger() //省略其他 .modifiedByCalendar("guoQing")//【千万不要忘记在这里注明时间法则根据此日历进行调整】 .build(); /** * 使用调度器绑定并启动调度器 */ scheduler.scheduleJob(jobDetail, simpleTrigger); scheduler.start(); }
二、在spring中使用Quartz
1.加入spring所需jar包,创建一个MyJob类,此时,不用实现任何接口:package com.wzj.spring.task; /** * 创建普通类,不必实现接口 */ public class MyJob { //方法自定义 public void remind(String name){ System.out.println(name+",快起床!"); } }
2.配置spring配置文件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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- 1.创建一个任务对象的bean,spring提供了MethodInvokingJobDetailFactoryBean类 --> <bean id="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 提供了targetObject和targetClass类型指定自定义类 --> <property name="targetObject"> <!-- 为了方便,就在此定义了个内部bean --> <bean class="com.wzj.spring.task.MyJob"/> </property> <!-- 指定任务方法 --> <property name="targetMethod" value="remind"/> <!-- 为方法传递参数 --> <property name="arguments"> <list> <value>Jack</value> </list> </property> </bean> <!-- 2.创建触发器对象 ,spring提供了SimpleTriggerFactoryBean类--> <bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 1000毫秒之后执行 --> <property name="startDelay" value="1000"/> <!-- 隔多长时间重复一次 --> <property name="repeatInterval" value="3000"/> <!-- 总共重复多少次!注意,是【重复】!也就是说会执行6次,这点与java中有些不同,java中时【总共】执行多少次。 --> <property name="repeatCount" value="5"/> <!-- 这里和java里面略微不同,在这里直接关联上任务,然后在与调度器关联的时候只关联触发器就行了 --> <property name="jobDetail" ref="myJob"/> </bean> <!-- 3.创建调度器,spring提供了SchedulerFactoryBean类 --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="trigger"/> </list> </property> </bean> </beans>
3.Main方法中只要写一句启动spring容器的代码就可以了,spring容器在气动式会自动的为我们创建任务调度的各个实例
public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); }
4.结果:输出6次“Jack,快起床!”
相关文章推荐
- Spring (七) Quartz任务调度器及其在Spring中的使用
- Quartz任务调度器及与Spring的整合使用
- Spring使用之:Quartz定时任务为什么会被阻塞
- 使用Spring Quartz执行定时任务
- 在Spring中使用Quartz进行任务调度
- 在Spring中使用Quartz进行任务调度
- Spring中使用quartz插件实现定时任务
- 在Spring中使用Quartz进行任务调度
- quartz 框架定时任务,使用spring @Scheduled注解执行定时任务
- 使用spring 的Quartz 定时任务入门
- Spring中Quartz调度器的使用
- 使用Spring3+Quartz实现定时任务
- 在Spring中使用Quartz进行任务调度(2)
- spring任务调度器quartz 时间配置
- 在spring中使用quartz进行任务调度遇到的问题
- spring中使用quartz实现定时任务
- 在Spring中使用Quartz进行任务调度(4)
- 在Spring中使用Quartz进行任务调度(5)
- 任务调度器quartz的使用
- quartz任务调度器的基本原理和使用方法,转载好文章只为大家搜索资源更方便