`
newspringwork
  • 浏览: 101391 次
  • 性别: 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.jar

    quartz:是一个任务调度框架,通过触发器设置作业的定时运行规则,来执行定时任务。相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。把一系列任务自动安置到一...

    quartz-2.2.3 jar包

    quartz-2.2.3 jar Job接口:自己写的"定时程序"实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业...

    quartz-2.2.3-Jar包.zip

    Quartz是一个完全由java编写的开源...quartz-2.2.3-Jar包,经测试只需要引入quartz-2.2.3.jar、quartz-jobs-2.2.3.jar和slf4j-api-1.7.7.jar就行了。配套教程http://blog.csdn.net/Leytton/article/details/79925659

    quartz-2.2.3.zip

    总结来说,"quartz-2.2.3.zip"提供的资源可以帮助我们设置和运行Quartz作业调度系统,通过"quartz-2.2.3-sql"的SQL脚本创建必要的数据库表,而"quartz-2.2.3.jar"则提供了Quartz框架的实现,使得我们可以方便地在...

    quartz-2.2.3相关jar包

    总之,Quartz-2.2.3是一个强大且灵活的定时任务框架,它能帮助开发者轻松地管理和执行复杂的定时任务,提升应用程序的自动化程度。在实际项目中,结合合适的配置和定制化开发,可以极大地提高工作效率。

    Quartz-2.2.3 CSDN 下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

    Quartz-2.2.3-distribution

    基于java的定时器。Quartz是OpenSymphony开源组织在Job scheduling领域...Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。此版本为当前最新版本。

    quartz-2.2.3-distribution.zip

    总结,"quartz-2.2.3-distribution.zip"是一个包含完整Quartz 2.2.3版本的压缩包,提供了一整套的调度解决方案,无论是在小型项目还是大型企业级应用中,都能帮助开发者实现高效、可靠的定时任务管理。通过理解和...

    quartz-2.2.3-distribution.tar.gz

    在解压"quartz-2.2.3-distribution.tar.gz"后,通常会得到包括JAR包、源代码、文档、示例项目等在内的资源。其中,核心JAR包如`quartz.jar`是直接用于项目中的,它包含了Quartz的全部类和接口。源代码可以帮助开发者...

    quartz-2.2.3版本的quartz初始化sql语句

    总之,Quartz 2.2.3的初始化SQL语句是搭建Quartz任务调度系统的重要环节,它们构建了存储任务调度数据的基础架构,使得Quartz能有效地管理、执行和监控定时任务。正确理解和使用这些SQL语句,有助于确保Quartz在各种...

    quartz-2.2.3-sql.zip

    总的来说,"quartz-2.2.3-sql.zip"文件为开发者提供了在各种常见数据库上快速启动和配置Quartz的工具,使得任务调度的实现更加便捷和高效。无论是小型项目还是大型企业级应用,Quartz都能作为强大的定时任务管理工具...

    quartz-2.2.3

    quartz-2.2.3 版本的包,用于老版本的java定时任务。可以下载学习。

    quartz-2.2.3-table-oracle.sql

    quartz-2.2.3-Oracle建表语句,源于GitHub上的定时任务Quartz项目中的提供的建表语句,根据表结构的含义,补充了部分字段和表注释

    quartz-2.2.3 需要的5个jar包

    在标题“quartz-2.2.3 需要的5个jar包”中,我们得知这是Quartz 2.2.3版本所必需的库文件集合。这些jar包包含了运行和配置Quartz所需的所有核心组件和其他依赖库。 首先,`quartz-2.2.3.jar`是Quartz的主要库文件,...

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

    综上所述,"quartz-2.2.3-官方文档数据及PDM表结构.zip"文件包含的内容将帮助开发者深入理解Quartz的各个方面,从基本概念到高级特性,为实际项目中的任务调度提供全面指导。通过学习和应用这些知识,可以提高应用...

    spring-context-support-4.2.2和quartz-2.2.3所需Jar包

    标题中的"spring-context-support-4.2.2和quartz-2.2.3所需Jar包"涉及到两个关键的Java库:Spring Context Support 4.2.2版本和Quartz Scheduler 2.2.3版本。这两个库在企业级Java应用开发中扮演着重要角色,特别是...

    quartz-2.2.3.jar完整包

    在"quartz-2.2.3.jar"这个完整包中,包含了Quartz库的所有必要组件,以及示例源码、开发文档和其他相关联的jar包,这对于理解和使用Quartz进行任务调度非常有帮助。 1. **Quartz核心概念**: - **Job**:代表一个...

Global site tag (gtag.js) - Google Analytics