Quartz之Trigger

浅谈Triiger

Quartz中的触发器用来告诉调度程序作业什么时候触发。即Trigger对象是用来触发执行Job的。Trigger是Quartz框架中的核心接口,其最重要的两个实现类是CronTriggerImpl与SimpleTriggerImpl。

触发器的通用属性
  • JobKey:表示与该Trigger绑定的Job实例的标识,触发器被触发时,该指定的Job实例会被执行
  • StartTime:表示触发器的时间表首次被触发的时间,它的值得类型是Java.util.Date
  • EndTime:指定触发器的不再被触发的时间,它的值得类型是Java.util.Date

关于这三个属性在代码中的具体实现。在Scheduler类中代码:

		//创建一个JobDetail实例,将该实例与HelloJob Class绑定
		JobDetail jobDetail=JobBuilder.newJob(HelloJob.class)
									.withIdentity("myJob", "group1")
									.build();
		
		//获取距离当前时间3秒后的时间
		date.setTime(date.getTime()+3000);
		//获取距离当前时间6秒后的时间
		Date endDate=new Date();
		endDate.setTime(endDate.getTime()+6000);
		//创建一个Trigger实例,定义该Job3秒后执行,并且每隔两秒钟重复执行一次,6秒后停止
		Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")//定义name/group
							.startAt(date)   //设置开始时间
							.endAt(endDate)	 //设置结束时间 
							.withSchedule(SimpleScheduleBuilder.simpleSchedule() //使用SimpleTrigger
												.withIntervalInSeconds(2) //每隔两秒执行一次
												.repeatForever() //一直执行,直到程序死去
												).build();

在Job实例中的代码:

		//打印当前的执行时间,格式为2017-01-01 00:00:00
		Date date=new Date();
		SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("当前时间为:"+sf.format(date));
		//编写具体的业务逻辑
		
		Trigger currentTrigger=context.getTrigger();
		System.out.println("开始时间:"+sf.format(currentTrigger.getStartTime()));
		System.out.println("结束时间:"+sf.format(currentTrigger.getEndTime()));
		JobKey jobKey=currentTrigger.getJobKey();
		System.out.println("与当前Trigger绑定的Job的name:"+jobKey.getName());
		System.out.println("与当前Trigger绑定的Job的group:"+jobKey.getGroup());

SimpleTrigger介绍

SimpleTrigger的作用

在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务

具体例子

距离当前时间4秒钟之后首次执行任务,6秒后停止,每隔2秒执行,执行3次

		//获取距离当前时间4秒后的时间
		date.setTime(date.getTime()+4000);
		//获取距离当前时间6秒后的时间
		Date endDate=new Date();
		endDate.setTime(endDate.getTime()+6000);
		//创建一个SimpleTrigger实例,定义该Job4秒后执行,并且每隔两秒钟重复执行一次,6秒后停止
		SimpleTrigger trigger=(SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")//定义name/group
							.startAt(date)   //设置开始时间
							.endAt(endDate)	 //设置结束时间 
							.withSchedule(SimpleScheduleBuilder.simpleSchedule() //使用SimpleTrigger
												.withIntervalInSeconds(2) //每隔两秒执行一次
												.withRepeatCount(3) //重复执行三次
												).build();

最终结果只重复执行了一次,6秒后停止。注:如果同时设置了结束时间与重复次数,先结束的会覆盖后结束的,以先结束的为准。
另外,需要注意的点

  • 重复次数可以为0,正整数或者SimpleTrigger.REPEAT_INDEFINITELY(永远)常量值
  • 重复执行的时间间隔必须为0或长整数

CronTrigger介绍

CronTrigger的作用

基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间,SimpleTrigger能够实现的,CronTrigger都能够实现,所以普遍都用CronTrigger。

具体例子
		//创建一个CronTrigger实例
		CronTrigger trigger=(CronTrigger)TriggerBuilder.newTrigger()
							.withIdentity("myTrigger", "group1")//定义name/group
							.withSchedule(
									CronScheduleBuilder.cronSchedule("0 5 21 * * ? *")) //填写cron表达式
							.build();

其实CronTrigger的核心,就是会写cron表达式。cron表达式是有7个子表达式组成的字符串,描述了时间表的详细信息。格式:[秒] [分] [小时] [日] [月] [周] [年],关于cron表达式的详细介绍,请参考这篇文章

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值