`
543089122
  • 浏览: 153239 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

开源定时器quartz入门

    博客分类:
  • java
阅读更多
闲来无事学习了下quartz框架,其实JAVA下的定时器框架还有几个,比如java.util.Timer可以实现简单的定时器任务,但是呢这个东东有个缺点就是一个Timer内部只开了一个线程来跑的,所以它只适合做最简单的单任务事情,如果有多件事情在同一时刻发生,那么它只能做完其中一件事情才能再去做另外一件事情,请看:http://jqsl2012.iteye.com/blog/1188184

还有一个呢就是jdk1.5出的java.util.concurrent.*,这个东东可以同时处理N件事情,但是呢如果你想处理比较复杂的定时任务,就得自己搞了,其实可以借助与java.util.Calendar这个强大的日历类来做。

在平时项目中许多人都是用的quartz,有的用它和struts或spring结合在一起处理可配置的定时任务,平时任务没让我去弄这个,于是空闲下来就弄下,图个新鲜。


边弄便粗略的看看源码,发现quartz的源码写的好像jQuery的源码啊,那种链式的写法,很优雅,它的类和接口以及方法的命名真是GOOD,今天就只做了个简单的例子,也简单的看了下org.quartz.*这个包的部分类接口和方法,看的不多。感觉这个东东还是很值得去研究下里。

牢骚一句,相比傻不拉唧的码代码,我还是更愿意看看jdk啊看看算法数据结构。


quartz第一天的代码:
package quartz;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SimpleJobDemo1 implements Job {

	private Calendar calendar = new GregorianCalendar();

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		calendar.setTime(new Date());
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH);
		int day = calendar.get(Calendar.DAY_OF_MONTH);
		int hh = calendar.get(Calendar.HOUR_OF_DAY);
		int mi = calendar.get(Calendar.MINUTE);
		int ss = calendar.get(Calendar.SECOND);
		String s = year + "-" + month + "-" + day + " " + hh + ":" + mi + ":"
				+ ss;
		System.out.println(s + ",triggerName:"
				+ context.getTrigger().getKey().getName() + ",triggerGroup:"
				+ context.getTrigger().getKey().getName() + ",jobName:"
				+ context.getJobDetail().getKey().getName() + ",jobGroup:"
				+ context.getJobDetail().getKey().getGroup() + ",jobMap:"
				+ context.getTrigger().getJobDataMap().getWrappedMap());
	}
}


package quartz;

import org.quartz.CronScheduleBuilder;
import org.quartz.DateBuilder;
import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTriggerDemo1 {
	public static void main(String[] args) {
		new SimpleTriggerDemo1().task();

	}

	/**
	 * quartz的类写的很优雅,类的方法能进行连写,和jQuery很像,好处很明显,优雅的同时也减少了代码,提高了创建类对象的使用
	 * 
	 * quartz包含job和trigger两个概念,job就是你要做的事情,trigger当然是触发器,他们都是有名称和组的,并且还有参数,
	 * 这个参数呢其实就是一个quartz自己搞的一个继承了java.util.Map的类org.quartz.JobDataMap。
	 * 基本上org.quartz.*包能完成大部分的定时器的任务,因为初学这个所以今天也就只看了这个包的内容,感觉还是非常容易伤手的。
	 * 总结:org.quartz.*包下基本上搞懂job、trigger、scheduler这3个相关的东西就行了,因为定时相关的就是围绕这3个东西展开的。
	 */
	public void task() {
		SchedulerFactory facroty = new StdSchedulerFactory();
		try {
			Scheduler scheduler = facroty.getScheduler();
			JobDetail jobDetail = JobBuilder.newJob(SimpleJobDemo1.class)
					.withIdentity(new JobKey("job名称", "job组名称")).build();
			JobDataMap newJobDataMap = new JobDataMap();
			newJobDataMap.put("key1", "value1");
			newJobDataMap.put("key2", "value2");
			Trigger trigger = TriggerBuilder
					.newTrigger()
					// 添加身份标识,可以添加或不添加
					.withIdentity(new TriggerKey("trigger名称", "trigger组名称"))
					.withSchedule(
							SimpleScheduleBuilder.simpleSchedule()
									.withIntervalInSeconds(1).repeatForever())
//					.withSchedule(CronScheduleBuilder.cronSchedule(""))
					.usingJobData(newJobDataMap)
					.startAt(
					// future将来的意思,futureDate就是将来的某个时间执行
							DateBuilder.futureDate(2, IntervalUnit.SECOND))
					.build();

			Trigger trigger2 = TriggerBuilder
			.newTrigger()
			// 添加身份标识,可以添加或不添加
			.withIdentity(new TriggerKey("trigger名称2", "trigger组名称2"))
			.withSchedule(
					SimpleScheduleBuilder.simpleSchedule()
					.withIntervalInSeconds(2).repeatForever())
					.startAt(
							// future将来的意思,futureDate就是将来的某个时间执行
							DateBuilder.futureDate(5, IntervalUnit.SECOND))
							.forJob(jobDetail).build();

			scheduler.scheduleJob(jobDetail, trigger);
			scheduler.scheduleJob(trigger2);//同一个job添加多个trigger
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
}
0
1
分享到:
评论

相关推荐

    Quartz定时器从入门到进阶

    Quartz定时器是一个开源的作业调度框架,专为J2SE和J2EE应用程序设计,完全用Java编写。它的核心优势在于提供强大的灵活性和简单性,使得开发者可以轻松创建简单的或复杂的任务调度。Quartz支持多种特性,如数据库...

    实现quartz定时器及quartz定时器原理介绍

    Quartz是一个广泛应用于Java开发中的开源定时调度框架,它的强大功能和灵活性使得开发者能够轻松地创建和管理定时任务。在本文中,我们将深入探讨Quartz的核心概念以及如何通过一个简单的例子来实现一个基础的定时器...

    一个简单的quartz定时器的demo

    Quartz是一款功能强大的开源作业调度框架,常用于Java应用程序中,用以实现任务的定时执行。这个"一个简单的quartz定时器的demo"是展示如何在项目中集成和使用Quartz的基本步骤,包括创建任务、配置调度器以及管理...

    spring 定时器的使用实例

    首先,Quartz是一个功能强大的开源作业调度框架,它允许应用程序定义和调度任务,以便在特定时间执行。Spring与Quartz的集成使得在Spring应用中管理定时任务变得更加便捷。 要开始使用Spring的Quartz定时器,首先...

    quartz-2.1.6.zip

    Quartz是开源的作业调度框架,它为Java应用程序提供了强大的定时功能。在Spring框架中集成Quartz,可以方便地创建和管理定时任务,使得开发者无需关注底层调度逻辑,专注于业务逻辑的实现。"quartz-2.1.6.zip"这个...

    quartz调度总结

    **一、Quartz入门** 要开始使用Quartz,首先需要下载Quartz的API库,并将其添加到项目的类路径中。通常,这包括主jar文件quartz-x.x.x.jar以及可能需要的core和optional目录下的其他jar文件。如果使用JDBCJobStore...

    SSM框架简易搭建(前端easyui)

    SSM框架是由Spring、Spring MVC和MyBatis三个开源项目组合而成的一个强大的Java Web开发框架。这个框架的主要目的是简化企业级应用的开发流程,提高开发效率。SSM框架的简易搭建是一个适合初学者入门的过程,涉及到...

Global site tag (gtag.js) - Google Analytics