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

简单记录一下基于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();
	}
}

猜你喜欢

转载自marionette.iteye.com/blog/2327613
今日推荐