Spring (七) Quartz任务调度器及其在Spring中的使用
2017-06-21 11:43
411 查看
一、原生的quartz框架的使用:
1.导入jar包:可以去quartz官网下载2.创建Java类,实现Job接口中的execute方法
[java]
view plain
copy
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.测试类中代码如下:
[java]
view plain
copy
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定义时间规则:
[java]
view plain
copy
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日——国庆节,我们不想让这个任务执行,此时就要排除掉这个特殊的日期
代码如下:
[java]
view plain
copy
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类,此时,不用实现任何接口:[java]
view plain
copy
package com.wzj.spring.task;
/**
* 创建普通类,不必实现接口
*/
public class MyJob {
//方法自定义
public void remind(String name){
System.out.println(name+",快起床!");
}
}
2.配置spring配置文件applicationContext.xml:
[html]
view plain
copy
<?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容器在气动式会自动的为我们创建任务调度的各个实例
[java]
view plain
copy
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
}
4.结果:输出6次“Jack,快起床!”
相关文章推荐
- 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任务调度器的基本原理和使用方法,转载好文章只为大家搜索资源更方便