java的任务调度框架quartz

1 篇文章 0 订阅

1.导入jar(pom.xml)

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

2.自定义任务实现job接口

package com.tls.timer;

import java.text.SimpleDateFormat;
import java.util.Date;

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

public class HelloJob implements Job {

	public void execute(JobExecutionContext context) throws JobExecutionException {
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Date date=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("current time is:"+sdf.format(date));
		System.out.println(context.getJobDetail().getKey().getName()+"+"+context.getJobDetail().getKey().getGroup());
//		System.out.println(context.getTrigger().getKey().getName()+"+"+context.getTrigger().getKey().getGroup());
//		System.out.println(context.getJobDetail().getJobDataMap().get("message"));
//		System.out.println(context.getTrigger().getJobDataMap().get("message"));
		System.out.println(Thread.currentThread().getName()+"-------");
	}

}

3.进行任务调度

package com.tls.timer;

import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {
	public static void main(String[] args) throws Exception{
		JobDataMap jobMap=new JobDataMap();
		jobMap.put("message", "myJob group1 message");
		JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1")
				.usingJobData(jobMap)
				.build();
		JobDetail jobDetail2=JobBuilder.newJob(HelloJob.class).withIdentity("myJob2", "group1")
				.usingJobData(jobMap)
				.build();
		
		Trigger trigger=TriggerBuilder.newTrigger()
				.withIdentity("myTrigger", "group1")
				.usingJobData("message", 2D)
				.startNow()
				.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
				.build();
		Trigger trigger2=TriggerBuilder.newTrigger()
				.withIdentity("myTrigger2", "group1")
				.usingJobData("message", 2D)
				.startNow()
				.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
				.build();
		
		SchedulerFactory factory=new StdSchedulerFactory();
		Scheduler scheduler = factory.getScheduler();
		scheduler.start();
		scheduler.scheduleJob(jobDetail, trigger);
		scheduler.scheduleJob(jobDetail2, trigger2);
//		scheduler.scheduleJob(jobDetail2, trigger);
//		Thread.sleep(10000);
//		scheduler.pauseJob(jobDetail.getKey());
//		Thread.sleep(5000);
//		scheduler.resumeJob(jobDetail.getKey());
		
	}
}
package com.tls.timer;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class MutilJobScheduler {
	public static void main(String[] args) throws Exception{
		SchedulerFactory factory=new StdSchedulerFactory();
		Scheduler scheduler = factory.getScheduler();
		scheduler.start();
		Calendar start=Calendar.getInstance();
		start.set(Calendar.HOUR_OF_DAY, 8);
		start.set(Calendar.MINUTE, 42);
		Calendar end=Calendar.getInstance();
		end.set(Calendar.HOUR_OF_DAY, 8);
		end.set(Calendar.MINUTE, 43);
//		for(int i=0;i<20;i++){
			JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
			//秒 分 小时 日 月 周 年(可以缺省)
			Trigger trigger=TriggerBuilder.newTrigger()
					.withIdentity("myTrigger", "group1")
					.usingJobData("message", 2D)
//					.startAt(start.getTime())
//					.endAt(end.getTime())
					.startNow()
					.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ? *"))
					.build();
			Trigger trigger2=TriggerBuilder.newTrigger()
					.withIdentity("myTrigger2", "group1")
					.usingJobData("message", 2D)
					.startAt(start.getTime())
					.endAt(end.getTime())
					.withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ? *"))
					.build();
			scheduler.scheduleJob(jobDetail, trigger);
//			scheduler.scheduleJob(jobDetail, trigger2);
//		}
		List<JobExecutionContext> currentlyExecutingJobs = scheduler.getCurrentlyExecutingJobs();
		Thread.sleep(2000*10);
		scheduler.deleteJob(new JobKey("myJob1", "group1"));
		System.out.println(currentlyExecutingJobs.size());
//		scheduler.shutdown(true);
	}
}

SimpleScheduleBuilder:简单的日期调度,可以按时间间隔,重复调度次数进行触发

CronScheduleBuilder:Cron风格的日期调度

可以设置任务的开始时间和结束时间

任务执行时,可以使用JobExecutionContext中的getJobDetail().getJobDataMap()携带数据

可以删除任务,清空任务,暂停任务,恢复任务等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值