Quartz结合Spring和不结合Spring
来源:互联网 发布:阿里云客服平台 编辑:程序博客网 时间:2024/05/07 19:47
原文:http://jiemyonline.blog.sohu.com/70215307.html
Quartz总体看来,大致包括:Job,JobDetail,Trigger,Scheduler。
Quartz总体看来,大致包括:Job,JobDetail,Trigger,Scheduler。
一、不使用Spring的做法:
1.实现Job接口的类,它是完成调度的实际要做的具体事情。
package com.test.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class PrintLogQuartzJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("In PrintLogQuartzJob - executing its JOB at "
+ new Date() + " by " + context.getTrigger().getName());
System.out.println("TriggerType is " + context.getJobDetail().getJobDataMap().getString("triggerType"));
System.out.println("In PrintLogQuartzJob - executing its JOB at "
+ new Date() + " by " + context.getTrigger().getName());
System.out.println("TriggerType is " + context.getJobDetail().getJobDataMap().getString("triggerType"));
}
private String triggerType;
public final String getTriggerType() {
return triggerType;
}
return triggerType;
}
public final void setTriggerType(String triggerType) {
this.triggerType = triggerType;
}
this.triggerType = triggerType;
}
}
2.JobDetail,会包含具体Job中的一些参数,放在一个Map中:JobDataMap。
2.JobDetail,会包含具体Job中的一些参数,放在一个Map中:JobDataMap。
3.简单触发器,类似Timer,有延时和间隔时间。通过SchedulerFactory 获取调度Scheduler
package com.test.quartz;
package com.test.quartz;
import java.util.Date;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleQuartzRunner {
/**
* @param args
*/
public static void main(String[] args) throws SchedulerException, Exception {
new SimpleQuartzRunner().simpleTriggerTask();
* @param args
*/
public static void main(String[] args) throws SchedulerException, Exception {
new SimpleQuartzRunner().simpleTriggerTask();
}
public void simpleTriggerTask() throws SchedulerException, Exception {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail = new JobDetail("jobDetail-1", "jobDetailGroup-1",
PrintLogQuartzJob.class);
jobDetail.getJobDataMap().put("triggerType","Simple");
// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger",
"triggerGroup-1");
// set its start up time
simpleTrigger.setStartTime(new Date(ctime));
// set the interval, how often the job should run (3 seconds here)
simpleTrigger.setRepeatInterval(3000);
// set the number of execution of this job, set to 10 times.
// It will run 10 time and exhaust.
simpleTrigger.setRepeatCount(10);
// set the ending time of this job.
// We set it for 60 seconds from its startup time here
// Even if we set its repeat count to 10,
// this will stop its process after 6 repeats as it gets it endtime by
// then.
// simpleTrigger.setEndTime(new Date(ctime + 60000L));
// set priority of trigger. If not set, the default is 5
// simpleTrigger.setPriority(10);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
JobDetail jobDetail = new JobDetail("jobDetail-1", "jobDetailGroup-1",
PrintLogQuartzJob.class);
jobDetail.getJobDataMap().put("triggerType","Simple");
// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger",
"triggerGroup-1");
// set its start up time
simpleTrigger.setStartTime(new Date(ctime));
// set the interval, how often the job should run (3 seconds here)
simpleTrigger.setRepeatInterval(3000);
// set the number of execution of this job, set to 10 times.
// It will run 10 time and exhaust.
simpleTrigger.setRepeatCount(10);
// set the ending time of this job.
// We set it for 60 seconds from its startup time here
// Even if we set its repeat count to 10,
// this will stop its process after 6 repeats as it gets it endtime by
// then.
// simpleTrigger.setEndTime(new Date(ctime + 60000L));
// set priority of trigger. If not set, the default is 5
// simpleTrigger.setPriority(10);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
// start the scheduler
scheduler.start();
// System.out.println("Pause.");
// scheduler.pauseJob("jobDetail-1","jobDetailGroup-1");
// System.out.println("Sleep start.");
// Thread.sleep(10000L);
// System.out.println("Sleep end.");
// System.out.println("Resume.");
// scheduler.resumeJob("jobDetail-1","jobDetailGroup-1");
scheduler.start();
// System.out.println("Pause.");
// scheduler.pauseJob("jobDetail-1","jobDetailGroup-1");
// System.out.println("Sleep start.");
// Thread.sleep(10000L);
// System.out.println("Sleep end.");
// System.out.println("Resume.");
// scheduler.resumeJob("jobDetail-1","jobDetailGroup-1");
}
}
}
4.克隆触发器。通过Linux的克隆表达式来定制。
package com.test.quartz;
package com.test.quartz;
import java.util.Date;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class CronQuartzRunner {
/**
* @param args
*/
public static void main(String[] args) throws SchedulerException, Exception {
new CronQuartzRunner().cronTriggerTask();
* @param args
*/
public static void main(String[] args) throws SchedulerException, Exception {
new CronQuartzRunner().cronTriggerTask();
}
public void cronTriggerTask() throws SchedulerException {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = schedulerFactory.getScheduler();
// current time
long ctime = System.currentTimeMillis();
long ctime = System.currentTimeMillis();
// Initiate JobDetail with job name, job group, and executable job class
JobDetail jobDetail = new JobDetail("jobDetail-2", "jobDetailGroup-2",
PrintLogQuartzJob.class);
jobDetail.getJobDataMap().put("triggerType","Cron");
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger",
"triggerGroup2");
try {
// setup CronExpression
// CronExpression cexp = new CronExpression("0/5 * * ? 11 6L 2007-2008");
CronExpression cexp = new CronExpression("0/5 * * ? 11 Mon#3 2007-2008");
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
JobDetail jobDetail = new JobDetail("jobDetail-2", "jobDetailGroup-2",
PrintLogQuartzJob.class);
jobDetail.getJobDataMap().put("triggerType","Cron");
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger",
"triggerGroup2");
try {
// setup CronExpression
// CronExpression cexp = new CronExpression("0/5 * * ? 11 6L 2007-2008");
CronExpression cexp = new CronExpression("0/5 * * ? 11 Mon#3 2007-2008");
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
}
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
// start the scheduler
scheduler.start();
}
/*
* Cron 表达式包括以下 7 个字段:
*
* 1.秒 2.分 3.小时 4.月内日期 5.月 6.周内日期 7.年(可选字段)
*
* 特殊字符:
* Cron 触发器利用一系列特殊字符,如下所示:
*
* 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
*
*
* 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母
*
* L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
*
* 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
*
* 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
*
* 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
*
*/
scheduler.start();
}
/*
* Cron 表达式包括以下 7 个字段:
*
* 1.秒 2.分 3.小时 4.月内日期 5.月 6.周内日期 7.年(可选字段)
*
* 特殊字符:
* Cron 触发器利用一系列特殊字符,如下所示:
*
* 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
*
*
* 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母
*
* L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
*
* 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
*
* 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
*
* 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
*
*/
}
二、使用Spring,具体的调度的获取,JobDetail和触发器的生成都不用编码实现。
二、使用Spring,具体的调度的获取,JobDetail和触发器的生成都不用编码实现。
1.只有单一业务类的一个方法作为任务的情况,那么需要如下配置:
<!-- quartz -->
<bean id="exaBusiness" class="com.test.quartz.ExampleBusiness"/>
<bean id="exaBusiness" class="com.test.quartz.ExampleBusiness"/>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="exaBusiness" />
<property name="targetMethod" value="doIt" />
<property name="concurrent" value="true" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="targetObject" ref="exaBusiness" />
<property name="targetMethod" value="doIt" />
<property name="concurrent" value="true" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="1000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
package com.test.quartz;
public class ExampleBusiness {
public void doIt(){
System.out.println("----------" + ExampleBusiness.class.getName());
}
public void doIt(){
System.out.println("----------" + ExampleBusiness.class.getName());
}
}
2.使用简单触发器的配置:
2.使用简单触发器的配置:
<!-- quartz -->
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.test.quartz.PrintLogQuartzJob" />
<property name="name" value="exampleJob"/>
<property name="group" value="def_group"/>
<property name="jobDataAsMap">
<map>
<entry key="triggerType" value="Cron" />
</map>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.test.quartz.PrintLogQuartzJob" />
<property name="name" value="exampleJob"/>
<property name="group" value="def_group"/>
<property name="jobDataAsMap">
<map>
<entry key="triggerType" value="Cron" />
</map>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="exampleJob" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="1000" />
</bean>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
package com.test.quartz;
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
package com.test.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class PrintLogQuartzJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("In PrintLogQuartzJob - executing its JOB at "
+ new Date() + " by " + context.getTrigger().getName());
System.out.println("TriggerType is " + context.getJobDetail().getJobDataMap().getString("triggerType"));
System.out.println("In PrintLogQuartzJob - executing its JOB at "
+ new Date() + " by " + context.getTrigger().getName());
System.out.println("TriggerType is " + context.getJobDetail().getJobDataMap().getString("triggerType"));
}
private String triggerType;
public final String getTriggerType() {
return triggerType;
}
return triggerType;
}
public final void setTriggerType(String triggerType) {
this.triggerType = triggerType;
}
this.triggerType = triggerType;
}
}
3.使用克隆触发器的配置:配置克隆表达式,Job同上。
<!-- quartz -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="exampleJob" />
<property name="cronExpression" value="0/5 * * ? 11 Mon#2 2007-2008" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
4.完整的配置,两个触发器一起运行某一个JobDetail,如果不想并发需要设定属性concurrent为false。如果写的JobDetail对象实现了Stateful接口,调度就会按照OS中类似时间片的概念来工作,一个Scheduler完成,另一个再开始。
<property name="jobDetail" ref="exampleJob" />
<property name="cronExpression" value="0/5 * * ? 11 Mon#2 2007-2008" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
4.完整的配置,两个触发器一起运行某一个JobDetail,如果不想并发需要设定属性concurrent为false。如果写的JobDetail对象实现了Stateful接口,调度就会按照OS中类似时间片的概念来工作,一个Scheduler完成,另一个再开始。
<!-- quartz -->
<bean id="exaBusiness" class="com.test.quartz.ExampleBusiness"/>
<bean id="exaBusiness" class="com.test.quartz.ExampleBusiness"/>
<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.test.quartz.PrintLogQuartzJob" />
<property name="name" value="exampleJob"/>
<property name="group" value="def_group"/>
<property name="jobDataAsMap">
<map>
<entry key="triggerType" value="Cron" />
</map>
</property>
</bean>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="exaBusiness" />
<property name="targetMethod" value="doIt" />
<property name="concurrent" value="true" />
</bean>
<property name="jobClass" value="com.test.quartz.PrintLogQuartzJob" />
<property name="name" value="exampleJob"/>
<property name="group" value="def_group"/>
<property name="jobDataAsMap">
<map>
<entry key="triggerType" value="Cron" />
</map>
</property>
</bean>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="exaBusiness" />
<property name="targetMethod" value="doIt" />
<property name="concurrent" value="true" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="exampleJob" />
<!-- property name="jobDetail" ref="jobDetail" /-->
<!-- property name="jobDetail" ref="jobDetail" /-->
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="1000" />
</bean>
</bean>
<property name="jobDetail" ref="exampleJob" />
<property name="cronExpression" value="0/5 * * ? 11 Mon#2 2007-2008" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
<!-- quartz -->
- Quartz结合Spring和不结合Spring
- 【Quartz】java Spring和Quartz结合定时器
- Spring结合Quartz配置
- Spring与quartz结合
- Spring与Quartz结合
- Spring Quartz 结合FirstDemo
- Spring和Quartz结合,配置细节
- spring结合quartz实现定时
- Spring+Quartz结合使用(Maven)
- Spring结合任务调度quartz
- spring好quartz的结合
- Quartz和Spring,Mybatis结合,读数据库空指针(NullPointerException)
- Spring和Mybatis结合
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- quartz结合spring轻松实现任务调度
- Quartz结合SPRING多任务定时调用
- 使用Quartz实现定时功能
- 自定义android的tab样式
- ExtJs根据数据源Json数据来动态创建store与columnModel
- 酒弄人生
- jquery 的脚本之家网址
- Quartz结合Spring和不结合Spring
- 风尘中,忘了捡拾那日女子留下的胭脂
- 浅谈elf文件执行过程
- 七夕在相爱人的眼中也是普通的一天 。
- android 动画
- Mybatils框架
- 《程序员书屋》微刊创建,赠书活动进行中!
- SAP BW Interview Questions
- 引用与指针的区别