Quarzt 入门

Quartz是很常用的定时器组建包。

一 quartz简单使用

1. 任务job类 SimpleJob.java

package quartz.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleJob implements Job{
	private static int count=0;
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		count++;
		System.out.println("Now the count is "+count+".");
	}
	public void execute(){
		count++;
		System.out.println("Now the count is "+count+".");
	}
}

Note:SimpleJob中有2个execute方法。带参数的是用于非Spring整合时调用的,不带参数的是用于与Spring整合时调用的。 【PS:可以通过类型添加类型转换器直接调用带参数的那个execute】

2. 定时器工具类 LocalScheduler.java 类

package quartz.traditional;
import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class LocalScheduler {
	private static SchedulerFactory sf = new StdSchedulerFactory();  
	private static String JOB_GROUP_NAME = "group1";
	private static String TRIGGER_GROUP_NAME = "trigger1";
	/**
	 * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
	 * @param jobName 任务名
	 * @param job 任务
	 * @param time 时间设置,发考quartz说明文档
	 * @throws SchedulerException
	 * @throws ParseException
	 * @throws java.text.ParseException
	 */
	@SuppressWarnings("rawtypes")
	public static void addJob(String jobName, Class jobClass, String time)
			throws SchedulerException, ParseException {
		Scheduler sched = sf.getScheduler();
		// 触发器任务
		JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME,jobClass);// 任务,任务组,任务执行类
		// 触发器时间设定
		CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组名
		trigger.setCronExpression(time);
		// 发动
		sched.scheduleJob(jobDetail, trigger);
		if (!sched.isShutdown())
			sched.start();
	} 
	/**
	 * 修改一个定时任务,使用默认的任务组名,触发器名,触发器组名
	 * @param jobName
	 * @param time
	 * @throws SchedulerException
	 * @throws ParseException
	 */
	@SuppressWarnings("rawtypes")
	public static void modifyJobTime(String jobName,Class jobClass, String time)
			throws SchedulerException, ParseException {
		
		removeJob(jobName);
		
		addJob(jobName,jobClass,time);
		
	}
	/**
	 * 移除一个定时任务,使用默认的任务组名,触发器名,触发�器组名
	 * @param jobName
	 * @throws SchedulerException
	 */
	public static void removeJob(String jobName) throws SchedulerException {
		Scheduler sched = sf.getScheduler();
		sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 暂发触发器
		sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
		sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
	}
	
	/**
	 * 关闭定时
	 * @throws SchedulerException
	 */
	public static void stop() throws SchedulerException{
		sf.getScheduler().shutdown();
	}
}

 3. 测试类 Main.java

package quartz.traditional;
import quartz.job.SimpleJob;
public class Main {

	public static void main(String[] args) throws Exception {
		// 启动一个任务
		LocalScheduler.addJob("simpleJob", SimpleJob.class, "0/1 * * * * ?");
		// 修改任务执行时间间隔
		LocalScheduler.modifyJobTime("simpleJob",SimpleJob.class,"0/10 * * * * ?");
		// 移除任务
		LocalScheduler.removeJob("simpleJob");
		// 关闭定时器
		LocalScheduler.stop();
	}
}

二 Spring整合quartz

1. Spring配置文件quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- ==================== quartz ==================== -->
	<bean id="simpleJob" class="quartz.job.SimpleJob"/>
	
	<bean id="jobTask"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="simpleJob"/>
		<property name="targetMethod" value="execute"/>
		<property name="concurrent" value="false" />
	</bean>
	
	<bean id="cronTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="jobTask"/>
		<property name="cronExpression">
			<value>0/1 * * * * ?</value>
		</property>
	</bean>
	
	<bean id="quartzScheduler" autowire="no" lazy-init="true"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				 <ref bean="cronTrigger" />
			</list>
		</property>
	</bean>
</beans>

2. 测试类 Main.java

package quartz.spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
	public static void main(String[] args) throws Exception {
		new ClassPathXmlApplicationContext("quartz/spring/quartz.xml");
	}
}

猜你喜欢

转载自antlove.iteye.com/blog/1922135