Java动态配置Quartz调度任务集成到spring(一)

在项目中需要使用到任务调度的功能,搜索了资料发现了quartz这个java任务调度框架,并且spring3.1以上的版本默认支持quartz,只需要在配置文件中配置一些信息,就能够把调度任务跑起来,确实很方便。后来,需求有变,我们的任务调度是要能够动态修改的,也就是说能够自由随时修改调度时间/状态,启动或者停止任务。很显然,spring配置调度任务是不能实现动态配置的,我们不可能每修改一次就要重新修改配置文件和重新启动项目的,那也就是说,要自己集成quartz到spring中。(第一次写博客,写的不好请见谅)

当然,首先我们要先了解quartz这个框架的基本用法

        要使用quartz 我们需要导入一个jar包,这里使用的是 quartz-2.2.1.jar   2.2.1版本

我们先来介绍一下quartz任务调度用的几个类
Job 是一个接口,里面有个方法execute,也就是我们任务逻辑执行的方法,使用的时候我们会新建一个类去实现这个 Job 类
JobDetail 是一个任务的信息类,通过任务名以及组名去标记一个唯一的任务,并且制定一个Job对象作为任务的执行类,
Trigger   是任务的触发器,主要任务是设置任务触发的时间点以及任务的信息,以任务名和组名作为唯一标记,
Scheduler是任务的调度器,管理任务的启动,停止,重置,当我们把JobDetail 和Trigger注册到调度器中时,会产生两个key,分别是JobKeyTrigggerKey,都以任务名和组名作为唯一标识。

JobBulider是创建JobDetail对象的接口

TriggerBulider是创建Trigger对象的接口

下面 我们通过一个例子来创建一个调度任务

首先,新建一个类去实现Job 接口类 作为任务执行类:

public class JobExecute implements Job {

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		//拿到执行的任务名
		String jobname=arg0.getJobDetail().getKey().getName();
		System.out.println(jobname);
		
	}
}

然后我们新建一个main方法的测试类:特别注意的是 使用cronSchedule()方法时 要亲自导入 import static org.quartz.CronScheduleBuilder.cronSchedule 才能使用
不懂cron时间表达式的百度一下就知道了

public class test2 {
	public static void main(String[] args) {

		try {
			//创建调度器工厂类
			SchedulerFactory sFactory = new StdSchedulerFactory();
			//通过工厂类拿到调度器对象
			Scheduler scheduler = sFactory.getScheduler();
			//拿到任务执行信息类
			JobDetail jobDetail=JobBuilder.newJob(JobExecute.class)
							.withIdentity("jobName", "jobGroup")
							.build();
			//创建一个触发器
			Trigger trigger=TriggerBuilder.newTrigger()
						.withIdentity("jobName", "jobGroup")
						//表示的是每天的18点17分 从0秒开始每隔5秒执行一次
				        	.withSchedule(cronSchedule("0/5 18 17 * * ?"))
						.forJob(jobDetail)
						.build();
			scheduler.scheduleJob(jobDetail, trigger);
			//启动任务
			scheduler.start();
				

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}



}

此时控制台输出一下内容



Quartz的基本使用就是这样,下一节,我们将处理在项目中如何集成spring和动态配置调度任务

展开阅读全文

没有更多推荐了,返回首页