Java 定时任务调度工具 Quartz(Part 1)

    Quartz是OpenSymphony提供的强大的开源任务调度(Job scheduling领域)框架,当前版本是2.2.x。Quartz能够用来建立简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs能够作成标准的Java组件或 EJBs。java

官网是:www.quartz-scheduler.org   Download->latest release ->Quartz 2.2.3.tar,gz设计模式

 

特色:框架

  • 强大的调度功能(调度运行环境的持久化机制,可保存并恢复调度现场)
  • 灵活的应用方式(组件式监听器/各类插件/线程池,多种组合方式,支持调度数据的多种存储方式)
  • 分布式和集群能力

 

Quartz的设计模式:maven

  1. Bulider模式
  2. Factory模式
  3. 组件模式(可插拔)
  4. 链式写法

 

Quartz的体系结构:分布式

三个核心概念:调度器/任务/触发器ide

                JobDetail/trigger(SimpleTrigger和CronTrigger)/scheduler工具

重要组成:ui

  • Job
  • JobDetail
  • JobBuilder
  • JobStore
  • Trigger(时间触发规则)
  • TriggerBuilder
  • ThreadPool
  • Sheduler
  • Calendar:单Trigger能够与多个Calendar关联,用于排除或包含某些时间点
  • 监听器:JobLitener/TriggerListener/SchedulerListener

 

-------------------------插件

第一个Quartz程序:线程

    1-新建Maven工程

    2-引入quartz工具包

  • pom.xml(负责维护项目所依赖的jar包的关系<dependencies>)
  • 打开mvnrepository.com->搜索quartz->2.2.3->负责dependency的内容,加到本地的pom.xml的<dependencies>中
  • maven依赖包自动更新

    3-建立HelloJob.java

public class HelloJob implements Job{

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		//打印当前的执行时间
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Current Exec Time is:"+sdf.format(date));
		
		//编写具体的业务逻辑
		System.out.println("Hello Quartz!");
	}
}

 

4-建立HelloScheduler.java

public class HelloScheduler {
	
	public static void main(String[] args) throws SchedulerException {
			
		//建立一个JobDetail 实例,将该实例与HelloJob.class 绑定
		
		JobDetail jobDetail = JobBuilder
				.newJob(HelloJob.class)
				.withIdentity("myJob", "group1")
				.build();
	
		//建立一个Trigger实例,定义该job当即执行,并每隔两秒钟重复执行一次,直到永远
		Trigger trigger = TriggerBuilder
				.newTrigger()
				.withIdentity("myTrigger", "group1")
				.startNow()
				.withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
				.build();
		
		//建立scheduler实例
		SchedulerFactory sfact = new StdSchedulerFactory();
		Scheduler scheduler = sfact.getScheduler();
		scheduler.start();	
		//绑定jobDetail和trigger
		scheduler.scheduleJob(jobDetail, trigger);
		
		//打印当前时间
		Date date  = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Start Time is:"+sdf.format(date));
	}
}

5-运行结果:

相关文章
相关标签/搜索