Java之 Quartz (石英) 定时任务笔记

概述

Quartz可分为 Job Trigger Scheduler 三大块

Job主要有三个类和接口

  • org.quartz.Job 用于实现要做的事
  • org.quartz.JobDetail 用于包装Job,要把Job变为JobDetail
  • org.quartz.JobBuilder 用于把Job变为JobDetail

用法, 实现Job👇

public class JobImpl implements Job{
   public void execute(JobExecutionContext context) throws JobExecutionException {		
   	//这里写要做些什么,比如👇
   	System.out.println(context.getFireTime());	
   }
}

然后用 JobBuilder 把 Job 变为 JobDetail👇

JobDetail jobDetail = JobBuilder.newJob(JobImpl.class)
				    .withIdentity("job1", "group1")
				    .build();

用TriggerBuilder获得多种Tigger,比如 CronTrigger

CronTrigger👇
CronTrigger trigger = TriggerBuilder.newTrigger()
			    .withIdentity("trigger1", "group1")
			    .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
			    .build();

SchedulerFactory创建Scheduler

SchedulerFactory sf = new StdSchedulerFactory();
try{Scheduler sched = sf.getScheduler();}
catch(SchedulerException e){//sf.getScheduler()方法要捕获或抛出异常}

把 JobDetail 和 Trigger 放入 Scheduler 然后start();

			scheduler.scheduleJob(jobDetail, trigger);
			scheduler.start();
1个JobDetail可以对应多个Trigger
1个Trigger 只能对应 1个JobDetail

例子

maven pom.xml引入

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

简单的Cron例子

实现Job👇

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

public class JobImpl implements Job{

	public void execute(JobExecutionContext context) throws JobExecutionException {
		
		//这里写要做些什么,比如👇
		System.out.println(context.getFireTime());
		
	}

}

主程序启动👇

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;


public class App 
{
    public static void main( String[] args )
    {
    	SchedulerFactory sf = new StdSchedulerFactory();
    	
    	try {
			Scheduler sched = sf.getScheduler();
			
			JobDetail jobDetail = JobBuilder.newJob(JobImpl.class)
				    .withIdentity("job1", "group1")
				    .build();

			CronTrigger trigger = TriggerBuilder.newTrigger()
			    .withIdentity("trigger1", "group1")
			    .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
			    .build();

			sched.scheduleJob(jobDetail, trigger);
			sched.start();
			
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
    }
}

简单的Cron封装👇

使用了静态引入

import org.quartz.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import org.quartz.impl.StdSchedulerFactory;

public class Cron {
	
	public SchedulerFactory schedulerFactory;
	public Scheduler scheduler;
	public JobDetail jobDetail;
	
	public Cron(SchedulerFactory sf , Class <? extends Job> jobClass , String cron) {
		schedulerFactory = sf;
		try {
			Scheduler sched =scheduler= sf.getScheduler();
			
			JobDetail j =jobDetail= newJob(
					jobClass
					)
				    .withIdentity("job1", "group1")
				    .build();

			Trigger trigger = newTrigger()
			    .withIdentity("trigger1", "group1")
			    .withSchedule(cronSchedule(cron))
			    .build();

			sched.scheduleJob(j, trigger);
			sched.start();
			
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
	
	public Cron(Class <? extends Job> jobClass , String cron) {
		this(new StdSchedulerFactory(),jobClass,cron);
	}
	
	public void shutDown() {
		try {
			scheduler.shutdown();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String...arguments) throws Exception{
		
		Cron c = new Cron(JobImpl1.class, "0/3 * * * * ?");
		
		Thread.sleep(10000);
		
		c.shutDown(); //shutDown默认true等待最后的触发执行完毕
		
	}	

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值