`
newspringwork
  • 浏览: 102949 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Quartz-2.2.3动态创建任务简单示例

    博客分类:
  • Java
 
阅读更多

简单记录一下基于Quartz-2.2.3动态创建任务的示例:

1.首先,pom.xml引入相关依赖(例子中日志用了log4j2)

<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>2.2.3</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.6.2</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.6.2</version>
</dependency>

 

 2.创建Quartz任务管理类QuartzTaskManager

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzTaskManager {

	private static Logger log = LogManager.getLogger();

	/**
	 * 任务调度器
	 */
	private Scheduler scheduler;

	private static QuartzTaskManager me;

	private QuartzTaskManager() {

	}

	public static QuartzTaskManager newInstance() {
		try {
			synchronized (log) {
				if (me == null) {
					QuartzTaskManager ins = new QuartzTaskManager();
					ins.scheduler = StdSchedulerFactory.getDefaultScheduler();
					me = ins;
				}
				return me;
			}
		} catch (SchedulerException e) {
			log.error("QuartzTaskManager实例化异常", e);
			return null;
		}
	}

	/**
	 * 运行定时任务管理服务
	 * 
	 * @throws SchedulerException
	 */
	public void start() throws SchedulerException {
		scheduler.start();
	}

	/**
	 * 停止定时任务管理服务
	 * 
	 * @throws SchedulerException
	 */
	public void shutdown() throws SchedulerException {
		scheduler.shutdown();
	}

	/**
	 * 添加任务
	 * 
	 * @param jobName
	 * @param jobGroupName
	 * @param triggerGroupName
	 * @param cronExpression
	 * @throws SchedulerException
	 */
	public void addJob(Class<? extends Job> clazz, String jobName,
			String jobGroupName, String triggerGroupName, String cronExpression)
			throws SchedulerException {
		log.info("添加任务{}[{}],cron:{}", jobName, jobGroupName, cronExpression);
		JobDetail job = JobBuilder.newJob(clazz)
				.withIdentity(jobName, jobGroupName).build();
		CronTrigger trigger = TriggerBuilder.newTrigger()
				.withIdentity(jobName, triggerGroupName)
				.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
				.build();
		scheduler.scheduleJob(job, trigger);
	}

	/**
	 * 删除任务
	 * 
	 * @param jobName
	 * @param groupName
	 * @throws SchedulerException
	 */
	public void deleteJob(String jobName, String groupName)
			throws SchedulerException {
		log.info("停止任务{}[{}]", jobName, groupName);
		scheduler.deleteJob(new JobKey(jobName, groupName));
	}
}

  3.创建2个测试任务类,实现org.quartz.Job接口

#TestJob

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class TestJob implements Job {

	private static int runCount = 0;

	private static Logger log = LogManager.getLogger();

	@Override
	public void execute(JobExecutionContext paramJobExecutionContext)
			throws JobExecutionException {
		log.info("job1-第" + (++runCount) + "次运行");
	}
}

 #TestJob2

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class TestJob2 implements Job {

	private static int runCount = 0;

	private static Logger log = LogManager.getLogger();

	@Override
	public void execute(JobExecutionContext paramJobExecutionContext)
			throws JobExecutionException {
		log.info("job2-第" + (++runCount) + "次运行");
	}
}

 4.最后就是测试类Test.java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.SchedulerException;

import cn.tinyf.job.QuartzTaskManager;

public class Test {

	private static Logger log = LogManager.getLogger();

	public static void main(String[] args) throws Exception {
		Class<? extends Job> clazz1 = TestJob.class;
		Class<? extends Job> clazz2 = TestJob2.class;
		String jobName1 = "testTask-1";
		String jobName2 = "testTask-2";
		String jobGroupName = "testTaskGroup";
		String triggerGroupName = "testTriggerGroup";
		String cronExpression1 = "0/5 * * * * ? *";
		String cronExpression2 = "0/6 * * * * ? *";
		QuartzTaskManager manager = QuartzTaskManager.newInstance();
		if (manager != null) {
			log.info("=========开启定时任务=========");
			manager.start();
			// job1
			manager.addJob(clazz1, jobName1, jobGroupName, triggerGroupName + "1", cronExpression1);
			// job2
			manager.addJob(clazz2, jobName2, jobGroupName, triggerGroupName + "2", cronExpression2);
		}

		Thread.sleep(30000);
		try {
			manager.deleteJob(jobName2, jobGroupName);
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
		Thread.sleep(30000);
		manager.shutdown();
	}
}

 

 

分享到:
评论

相关推荐

    quartz-2.2.3-官方文档数据及PDM表结构.zip

    Quartz 2.2.3 版本是这个框架的一个稳定版本,提供了许多改进和功能,以帮助开发人员更好地管理和调度任务。 文档部分包含了Quartz的详细使用指南、API参考以及示例,这些内容对于理解Quartz的工作原理和如何在项目...

    Springboot整个Quartz实现动态定时任务的示例代码

    SpringBoot 整个 Quartz 实现动态定时任务的示例代码 SpringBoot 是一个基于 Java 的开源框架, Quartz 是一个功能强大的任务调度器,两者的结合可以实现动态定时任务的示例代码。在本文中,我们将详细介绍如何使用...

    spring chm文档

    2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. ...

    Grails权威指南

     2.2.3 groovy字符串  2.2.4 闭包(closures)  2.2.5 列表(list)和映射(map)  2.2.6 expando动态对象  2.2.7 范围(range)  2.3 groovy的高级特性  2.3.1 一切都是对象  2.3.2 ...

    Spring中文帮助文档

    2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut...

    Spring API

    2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut...

    Spring 2.0 开发参考手册

    2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. ...

Global site tag (gtag.js) - Google Analytics