Quartz用法Quartz和Spring整合集成
一、 Quartz 简介
1、java 编写的任务调度框架 --- 简单理解: 定时器 。 类似于: java中 Timer 作用。
2、定时器: 每天叫醒你的不是7:30的闹钟,是梦想!
3、Quartz 官网:
http://www.quartz-scheduler.org/
二、在java代码中使用
1、jar包:quartz-2.2.3.jar
2、实现思路:
- 创建一个普通java类 JobDetails,实现 org.quartz.Job 接口,编写具体干活的内容
- 创建JobDetail对象,配置 JobDetails
- 创建 Trigger 对象,配置执行时间相关的内容
- 创建 Scheduler 对象,执行任务调度
3、代码实现
a、 创建一个普通java类 JobDetails
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class JobDetails implements Job{
@Override
public void execute(JobExecutionContext context) throws
JobExecutionException {
System.out.println("quartz method is running ... ");
}
}
b、具体执行代码
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest {
public static void main(String[] args) throws SchedulerException {
//1、 创建 JobDetail 对象,并且设置选项
JobDetail jobDetail = JobBuilder.newJob(JobDetails.class).withIdentity("jobOne").build();
//2、 创建Trigger对象,并进行相关配置
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
triggerBuilder.withIdentity("triggerOne");
triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule().
withIntervalInMilliseconds(1000).//1000ms 执行一次
repeatForever()); // 永不停歇
Trigger trigger = triggerBuilder.build();
//3、创建Scheduler 对象,执行任务调度
SchedulerFactory schedulerFactory=new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
//4、启动任务调度
scheduler.start();
System.out.println("over ... ");
}
}
三、Quartz和Spring 整合
1、jar包:
quartz-2.2.3.jar , spring-context-support-4.0.8.RELEASE.jar
2、实现思路:
- 创建一个普通的java类 JobOne,编写一个具体干活的方法
package com.quartz;
public class JobOne{
public void runJob(){
System.out.println("任务开始...");
System.out.println("任务结束 end...");
}
}
- spring.xml 配置文件中完成如下配置
<!-- spring quartz config begin -->
<!-- 1、 config execute job class -->
<bean id="jobOne" class="com.quartz.JobOne"></bean>
<!-- 2、 config jobDetail -->
<bean id="springJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jobOne"></property>
<property name="targetMethod" value="runJob"></property>
</bean>
<!-- 3、 config trigger -->
<bean id="trigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="springJobDetail"></property>
<property name="cronExpression" value="0/2 * * * * ?"></property>
</bean>
<!-- config schedulerFactory -->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger"/>
</array>
</property>
<!-- 禁止随Web容器一起启动,需要手动调用 -->
<property name="autoStartup" value="false"/>
</bean>
<!-- quartz scheduler config end -->
3、在Controller 中进行调用
a、注入 SchedulerFactoryBean
@Autowired
private SchedulerFactoryBean schedulerFactoryBean;
b、启动任务调度
@RequestMapping(value={"/start"})
@ResponseBody
public String start(){
try {
schedulerFactoryBean.getScheduler().start();
} catch (SchedulerException e) {
e.printStackTrace();
return "{\"error\":"+Exceptions.getStackTraceAsString(e)+"}";
}
return "success";
}
四、关于Cron表达式
1、Cron表达式,无需过多研究,使用表达式生成器即可:
http://cron.qqe2.com/