quatz框架立即启动问题解决

quatz框架立即启动问题解决

因为要设置一个定时任务每隔半个小时就要运行一次,并且需要启动程序这个定时任务就要立即执行里面的内容,因为这个问题出了很多错误记录一下。也只是刚入门,以后还需要多多了解,目前经过改动后可以一直运行程序并且可以立即启动程序
将触发器设置为简单触发器,配置如下:

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
        .startAt(new Date()).withSchedule(SimpleScheduleBuilder.simpleSchedule().withRepeatCount(-1).withIntervalInSeconds(300)).build();

.startAt()设置定时任务什么时候启动,现在放的是立即启动,即为当前时间
.withRepeatCount(-1) 设置定时任务运行多少次,-1是无数次(测试过,至少很多次)
.withIntervalInSeconds(300) 设置定时任务间隔多长时间 ,单位是秒

如果我用使用cornTrigger规则

  Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
	          .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))
	          .startNow().build();  

并不能立即就启动定时任务中的程序,虽然用TriggerBuilder有一个startNow()方法,是可以立即启动,但能否立即启动还需要看约束条件,不一定就立即启动。
下面是我找到api的介绍

在这里插入图片描述
下面是一些quatz的知识点

Quartz框架主要包括:scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节
其中的job任务是一个接口,里面定义了一个execute的方法

package org.quartz;
public abstract interface Job
{
  public abstract void execute(JobExecutionContext paramJobExecutionContext)
    throws JobExecutionException;
}

只要实现此接口,实现execute方法即可。定时执行的程序写在execute方法里面。

package com.test;
 
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 需要执行的任务
 */
public class MyJob implements Job {
 
	@Override
	//把要执行的操作,写在execute方法中
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("测试Quartz"+new Date());
	}
}

JobDetail:任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。
Trigger触发器:执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger
scheduler任务调度:是最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行

package com.test;
 
import java.util.Date;
 
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
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.impl.StdSchedulerFactory;
 
/**
 * 调用任务的类
 */
public class SchedulerTest {
   public static void main(String[] args) {
   
	 //通过schedulerFactory获取一个调度器
	   SchedulerFactory schedulerfactory=new StdSchedulerFactory();
	   Scheduler scheduler=null;
	   try{
//		通过schedulerFactory获取一个调度器
		   scheduler=schedulerfactory.getScheduler();
		   
//		 创建jobDetail实例,绑定Job实现类
//		 指明job的名称,所在组的名称,以及绑定job类
		   JobDetail job=JobBuilder.newJob(MyJob.class).withIdentity("job1", "jgroup1").build();
		 
		   
//		 定义调度触发规则
		   
//		使用simpleTrigger规则
//		  Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
//				          .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withRepeatCount(8))
//				          .startNow().build();
//		使用cornTrigger规则  每天10点42分
			  Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
	          .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))
	          .startNow().build();  //用TriggerBuilder有一个startNow()方法,是可以立即启动,但能否立即启动还需要看约束条件,不一定就立即启动
		   
//		 把作业和触发器注册到任务调度中
		   scheduler.scheduleJob(job, trigger);
		   
//		 启动调度
		   scheduler.start();
		   
		   
	   }catch(Exception e){
		   e.printStackTrace();
	   }
	   
}
}

maven依赖

<!--quartz-->
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
   <groupId>org.quartz-scheduler</groupId>
   <artifactId>quartz</artifactId>
   <version>2.3.0</version>
</dependency>

CronScheduleBuilder的部分触发规则
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点整触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时触发
0 0 12 ? * WED 表示每个星期三中午12点 触发
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值