项目开发基本会使用到定时器,JDK有自带的定时器Timer。Spring框架也有自己的定时器QuartzJobBean,以下是二者的使用方式:
JDK-Timer定时器:
jdk定时器使用步骤很简单:
1.创建一个定时任务类并继承TimerTask类,定时任务类用于实现实际业务需求;
2.创建定时任务timer实例;
3.调用timer实例的schedule方法,带上定时任务实例等参数;
1).定义继承了TimerTask的任务类:
import java.util.TimerTask;
public class TimerTaskBean extends TimerTask {
/**
* 定时任务代码块
*/
@Override
public void run() {
//TODO 根据需求实现定时任务的代码块
System.out.println(Thread.currentThread().getName() + " 运行结束");
}
2).创建Timer实例并执行schedule方法:
public class TimerDemo {
public static void main(String[] args) throws ParseException {
//创建计时器实例
Timer timer = new Timer("开始执行任务-------------------");
//创建计时器任务
TimerTask task = new TimerTaskBean();
//调用计时器的schedule方法,此处的2000代表当前时间2000毫秒之后开始执行
timer.schedule(task, 2000);
System.out.println("定时任务已启动,2秒后执行");
}
}
定时任务也有几种模式,通过schedule重载方法实现:
- 系统启动,延迟delay秒后运行:schedule(TimerTask task,long delay)
- 系统启动,在指定时间运行:schedule(TimerTask task,Date date)
- 系统启动,延迟delay秒后运行,并每间隔period秒运行一次:schedule(TimerTask task, long delay, long period)
- 系统启动,在指定时间date运行后,并每间隔period秒运行一次:schedule(TimerTask task, Date date, long period)
Spring-QuartzJobBean定时器:
学习Spring定时器之前,先来了解下面三个类预热下:
1、调度工作类:org.springframework.scheduling.quartz.JobDetailBean,该对象通过jobClass属性指定调度工作类(eg:例子中的QuartzJob 类);
2、调度触发器:org.springframework.scheduling.quartz.CronTriggerBean,该对象通过jobDetail属性指定工作类,通过cronExpression属性指定调度频率;
3、 调度工厂类:org.springframework.scheduling.quartz.SchedulerFactoryBean,该对象通过triggers属性指定单个或多个触发器。
一、业务实现工作类:
public class QuartzJob extends QuartzJobBean {
private static int i = 0;
//需要调度的任务
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
//TODO 根据需求实现定时任务的代码块
System.out.println("工作类调度" + ++i + "进行中...");
}
二、配置spring文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 1、JobDetailBean 工作类配置 -->
<bean name="job_1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.erayt.job.QuartzJob" />
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="10" /><!-- Job1中的 timeout属性,10秒后启用调度-->
</map>
</property>
</bean>
<!-- 2、CronTriggerBean 触发器配置-->
<bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job_1" /><!-- 注入1步骤中的工作类 -->
<!-- 每天凌晨2点执行 -->
<property name="cronExpression" value="0 0 2 * * ?" />
</bean>
<!-- 3、SchedulerFactoryBean 配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger1" /><!-- 注入2步骤中触发器 -->
</list>
</property>
</bean>
</beans>
三、启动项目,定时器就会根据设定的时间以及调度频率来执行。
———编写者:梦想的边缘