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/