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");
}
}
本文介绍Quartz定时任务组件的基本使用方法,包括定义任务、创建定时器并进行任务调度等核心操作。同时,还展示了如何将Quartz与Spring框架进行整合,实现更高级的功能。
317

被折叠的 条评论
为什么被折叠?



