`

Java 定时任务及作业调度 Quartz与Timer

阅读更多

相于Quartz的简介可以去网上查查,Timer是JDK中提供的,它们俩个都可以用来做:定时任务,作业调度

最近一个项目要用到这个,所以在网上花了一点时间搜集一下资料。我这里只能做为入门练习,深入的学习要在项目锻炼。

一、Quartz

1.开发作业,要继承org.quartz.Job

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

/**
 * 作业
 * 
 * @author mingxue.zhang@163.com 2012-4-8
 */
public class SimpleJob implements Job {

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		System.out.println("作业开始:exec...");
		JobKey jobKey = context.getJobDetail().getKey();
		System.out.println(jobKey);
	}
}

 

2.调度

import org.quartz.*;

public class Dispatch {
	public static void main(String[] args) throws Exception {
		// 调度作业
		JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1",
				"group1").build();
		// 定时器
		Date runTime = new Date();
		// Date runTime = DateBuilder.nextGivenSecondDate(null, 15);// 启动后15秒运行
		
		// 简单的定时器
		//Trigger trigger = null;
		/*
		trigger = TriggerBuilder.newTrigger()
				.withIdentity("trigger1", "group1").startAt(runTime).build();
		*/
		// 反复执行(5次),指向执行完间隔时间(10秒)
		/*
		trigger = TriggerBuilder.newTrigger()
				.withIdentity("trigger1", "group1").startAt(runTime)
				.withSchedule(
						SimpleScheduleBuilder.simpleSchedule()
								.withIntervalInSeconds(10).withRepeatCount(5))
				.build();
		*/
		//使用cron表达式
		CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(
				"trigger1", "group1").withSchedule(
				CronScheduleBuilder.cronSchedule("0/20 * * * * ?")).build();

		SchedulerFactory sf = new StdSchedulerFactory();
		// Scheduler 调度器 四种状态: stand-by, start, pause, shutdown
		Scheduler sched = sf.getScheduler();
		// 调度器绑定Job 和 Trigger
		Date jobRuningTime = sched.scheduleJob(job, trigger);// 返回Job运行的时间
		System.out.println(new SimpleDateFormat("hh:mm:ss").format(jobRuningTime));
		// 开始调度
		sched.start();

		// sched.shutdown(true);
	}
}

 

3.cron表达式

字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

“*”字符被用来指定所有的值。如:"*"在分钟的字段域里表示“每分钟”。
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。

“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。

“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。

“/”字符用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。

详细用法请见附件

 

二、Timer

1.作业,要继承java.util.TimerTask

/**
 * 作业
 * 
 * @author mingxue.zhang@163.com 2012-4-8
 */
public class TimerTaskJob extends TimerTask {
	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	@Override
	public void run() {
		System.out.println("---===+"
				+ sdf.format(Calendar.getInstance().getTime()));
	}
}

2.调度

import java.util.Timer;

public class Dispatch {
	public static void main(String[] args) {
		TimerTaskJob job = new TimerTaskJob();
		Timer timer = new Timer();
		// true 说明这个timer以daemon方式运行(优先级低, 程序结束timer也自动结束)只会执行一次
		//timer = new Timer(true);
		timer.schedule(job, 1000, 2000);
		// 几个重载的方法
		// 以指定时间运行
		// 1 timer.schedule(task, time);
		// firstTime为Date类型,period为long 从firstTime时刻开始,每隔period毫秒执行一次。
		// 2 timer.schedule(task, firstTime, period);
		// delay 为long类型:从现在起过delay毫秒执行一次
		// 3 timer.schedule(task, delay)
		// delay为long,period为long:从现在起过delay毫秒以后,每隔period
		// 4 timer.schedule(task, delay, period)
	}
}

 

相于Quartz的高级用法可见附件中的官方提供的例子!!!

  • Quartz.rar (1.4 MB)
  • 描述: 例子源码
  • 下载次数: 167
分享到:
评论
1 楼 ztiany 2015-01-12  

相关推荐

    Spring的定时任务开发及对Quartz和Timer支持

    在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Java定时任务是应用程序中不可或缺的一部分,它允许程序在特定时间执行特定操作,无需用户干预。...相比`java.util.Timer`,Quartz提供了更丰富的功能和更强的灵活性,是Java定时任务的首选解决方案。

    java定时任务调度

    Java定时任务调度是Java开发中常见的一种功能,用于在特定时间执行特定的任务,例如数据同步、日志清理、报表生成等。在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    java定时执行多任务和quartz定时执行多任务

    Java定时执行多任务是软件开发中的常见需求,用于在特定时间点或按固定频率执行某项操作,例如数据同步、日志清理等。Java提供了一些内置的定时工具,如`java.util.Timer`和`java.util.concurrent....

    java定时任务的实现方式

    本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种方式是使用Java内置的`Timer`类。`Timer`类提供了定时任务调度的功能,可以按照预设的时间间隔执行任务。在提供...

    quartz 和 Timer实现定时功能

    `Quartz`和`Timer`都是Java中实现定时任务的工具,各有特点和适用场景。 `Timer`是Java标准库中的类,位于`java.util`包下,提供了定时任务的基本功能。`Timer`创建一个后台线程,可以安排单次或周期性的任务执行。...

    Spring的quartz和Timer实现定时

    Quartz是一款开源的作业调度框架,而Timer是Java标准库中的一个类,用于执行定时任务。这两个工具都能帮助开发者在指定的时间点或周期性地执行任务,但在功能和复杂性上有所不同。 首先,我们来看一下Spring对...

    java定时任务开源案例

    - Quartz是一款功能丰富的开源作业调度框架,它可以用于构建复杂的工作流,支持按日期、时间间隔或CRON表达式进行任务调度。Quartz提供了丰富的API和配置选项,能方便地集成到各种Java应用中。 3. **Spring ...

    java定时任务小例子

    在这个“java定时任务小例子”中,我们可以看到两个关键文件:`TimerTest.java`和`DoTask.java`,它们分别代表了定时器的任务调度和实际执行任务的组件。 首先,我们来看`TimerTest.java`。这个文件很可能是整个...

    java定时任务

    综上所述,`SimpleTriggerRunner.java`和`Jobtest.java`构成了一个基本的Java定时任务系统,负责任务的调度和执行。理解Quartz或Spring的定时任务机制,以及如何配置和管理触发器,是掌握这部分知识的关键。同时,...

    任务调度开源框架Quartz动态添加、修改和删除定时任务

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听...

    Spring 框架自带定时任务和Quartz定时任务

    总结来说,定时任务是开发者常用的一种工具,它的实现方式多样,从简单的Java Timer到强大的Quartz框架都有涉及。Spring框架提供了Spring Task来实现定时任务,它简单易用,能够覆盖大部分常规需求。对于复杂的调度...

    java 定时执行任务

    Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...

    小议时序调度Timer和Quartz

    "小议时序调度Timer和Quartz"这个主题主要关注Java平台上的两种常见定时任务框架:Java内置的`java.util.Timer`类和开源的Quartz库。 首先,让我们详细探讨一下`java.util.Timer`。这个类是Java标准库的一部分,它...

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...

    spring timer、quartz俩种任务调度

    总的来说,`Spring Timer`适合简单的定时任务需求,而`Quartz Scheduler`更适合处理大型项目或需要高级调度功能的场景。在实际应用中,开发者可以根据项目需求选择合适的任务调度器。通过`spring-taskScheduling`这...

Global site tag (gtag.js) - Google Analytics