Spring定时器QuartzJobBean和JDK定时器Timer

项目开发基本会使用到定时器,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>

三、启动项目,定时器就会根据设定的时间以及调度频率来执行。


———编写者:梦想的边缘


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值