Quartz初探

来源:互联网 发布:unity3d 点击选中物体 编辑:程序博客网 时间:2024/06/07 00:35

Quartz是一个开源的作业调度框架,其中分3部分:

1.作业 ,需要实现org.quartz.Job接口

2.触发器  常用的有:

2-1.SimpleTrigger

2-2.CronTrigger

可以定制复杂时间 Cron表达式:Seconds Minutes Hours DayofMonth Month DayofWeek Year

可以使用复杂符号:

* 表示任意

? 只能用在DayofMonth和DayofWeek,也表示任意当写法如下13 13 15 20 * ?这里最后就要用?号

- 表示范围 5-20

/ 表示从起始时间开始触发,然后每隔固定时间触发一次 5/20 起始5,间隔20

, 表示枚举 5,20

L表示最后.只能用在DayofMonth和DayofWeek

W 表示有效工作日,只能出现在DayofMonth

LW 表示每个月的最后一个工作日

# 表示某个月的第几个星期几 4#5

3.调度器由Scheduler接口体现

/** * 作业 * @author Administrator * */public class TestJob implements Job{private  static int count = 0;private boolean isRunning = false;@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {// TODO Auto-generated method stubif(!isRunning){count++;System.out.println(new Date()+"作业"+count+"被调度");for(int i=0;i<100;i++){System.out.println("作业完成"+(i+1)+"%");try {Thread.sleep(100);} catch (Exception e) {e.printStackTrace();}}System.out.println(new Date()+"作业调度完成");}else{System.out.println(new Date()+"任务退出");}}}

/** * 调度器 * @author Administrator * */public class MyQuartzServer {public static void main(String[] args){try {new MyQuartzServer().startScheduler();} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private void startScheduler() throws SchedulerException{//调度器实例Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();//以TestJob创建JobDetailJobDetailImpl jobDetail = new JobDetailImpl("dd",Scheduler.DEFAULT_GROUP,TestJob.class);//触发器Trigger trigger = new  SimpleTriggerImpl("dd",Scheduler.DEFAULT_GROUP,5000,200);                //绑定触发器和Detail                scheduler.scheduleJob(jobDetail,trigger);scheduler.start();}}


现在将其应用到Spring中

1.创建作业有两个方法

1-1.继承QuartzJobBean

继承抽象类QuartzJobBean

再配置

<bean name="quartzDetail" class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass"  value="QuartzJobBean子类"></property></bean>

1-2.利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通java对象,无需继承任何父类,直接配置即可使用

<bean id="testQuarz" class="XX.TestQuartz"/><bean id="quartzDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">   <property name="targetObject" ref="testQuartz"/><!--目标类-->   <property name="targetMethod" value="test"/><!--目标类方法--></bean>

定义完bean后

2.定义触发器SimplieTriggerBean或CronTriggerBean

3.使用SchedulerFactoryBean调度

public class PayJob extends QuartzJobBean{private boolean isRunning = false;private EmpManager em;@Overrideprotected void executeInternal(JobExecutionContext arg0)throws JobExecutionException {if(!isRunning){System.out.println("开始打卡");isRunning = true;em.autoPunch();isRunning = false;}}public EmpManager getEm() {return em;}public void setEm(EmpManager em) {this.em = em;}}


<!-- Quartz2 --><!-- 定义触发器 --><bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerBean"><!-- Detail --><property name="jobDetail"><bean  class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass" value="com.fox.wf.scheduler.PunchJob"></property><property name="jobDataAsMap"><map><entry key="em" value-ref="empManager"></entry></map></property></bean></property><!-- time --><property name="cronExpression" value="0 0 7,12 ? * MON-FRI"></property></bean><bean id="cronTriggerPay" class="org.springframework.scheduling.quartz.CronTriggerBean"><!-- Detail --><property name="jobDetail"><bean  class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass" value="com.fox.wf.scheduler.PayJob"></property><property name="jobDataAsMap"><map><entry key="em" value-ref="empManager"></entry></map></property></bean></property><!-- time --><property name="cronExpression" value="0 0 2 3 * ? *"></property></bean><!-- 作业调度 --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref local="cronTriggerPunch"></ref><ref local="cronTriggerPay"></ref></list></property></bean>




原创粉丝点击