Quartz定时任务示例

Quartz: 专业的定时框架quartz,功能强大,可以让你的程序在指定时间执行,也可以按照某一个频度执行,支持数据库、监听器、插件、集群

quartz:
  1. 下载: http://www.quartz-scheduler.org/downloads/

  2. 导入lib或maven依赖

    <dependency>
    	<groupId>org.quartz-scheduler</groupId>
    	<artifactId>quartz</artifactId>
    	<version>2.2.1</version>
    </dependency>
    <dependency>
    	<groupId>org.quartz-scheduler</groupId>
    	<artifactId>quartz-jobs</artifactId>
    	<version>2.2.1</version>
    </dependency>
    
  3. 核心接口
    a. scheduler 调度器
    b. Job 任务
    c. trigger 触发器
    d. JobDetail 任务信息

  4. trigger触发器
    a. SimpleTrigger // 功能简单 指定时间、周期
    b. CronTrigger // 基于cron表达式触发器 cron表达式: 秒 分 时 日 月 周 年

  • 简单入门
/**
*
* Created by gaozhy on 2017/6/25.
*/
public class MyScheduler {
	public static void main(String[] args) {
		try {
			// 1. 创建调度器工厂
			SchedulerFactory schedulerFactory = new StdSchedulerFactory();
			// 2. 获取调度器
			Scheduler scheduler = schedulerFactory.getScheduler();
			// 3. 创建任务详情
			JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("myJob","default").build();
			// 4. 启动10秒后的时间
			Date futureDate = DateBuilder.futureDate(10, DateBuilder.IntervalUnit.SECOND);
			// 5. 创建触发器
			Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger","default").startAt(futureDate).build();
			// 6. 注册任务详情和触发器
			scheduler.scheduleJob(jobDetail,trigger);
			//7. 启动调度任务
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
}
/**
* Created by gaozhy on 2017/6/25.
*/
public class MyJob implements Job {
	private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("log:"+simpleDateFormat.format(new Date()));
	}
}
  • 基于simpleSchedule的定时任务
/**
* 简单触发器 调度程序
* Created by Administrator on 2017/6/25 0025.
*/
public class SimpleTriggerScheduler {
	public static void main(String[] args) {
		try {
			StdSchedulerFactory factory = new StdSchedulerFactory();
			Scheduler scheduler = factory.getScheduler();
			JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("myJob","default").build();
			// 指定触发器
			// lucene 唐诗
			// 1. 获取数据库每天新增的诗
			// 2. 定时任务 每天零点触发
			// 3. 任务方法 增量索引
			// 简单定时 SimpleTrigger 间隔或者重复调用
			Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
			scheduler.scheduleJob(jobDetail,trigger);
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
}
  • 基于CronSchedule的定时任务
/**
* 基于CronTrigger
* Created by Administrator on 2017/6/25 0025.
*/
public class CronTriggerScheduler {
	public static void main(String[] args) {
		try {
			StdSchedulerFactory factory = new StdSchedulerFactory();
			Scheduler scheduler = factory.getScheduler();
			JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("myJob","default").
			usingJobData("id",1).usingJobData("name","zs").build();
			/**
			* 在cron表达式中 日和周中不能同时出现*
			* quartz cron表达式 6位或者7位
			*/
			//Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0 0 10 ? * 4#3")).
			Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * * 2017-2020")).
			withIdentity("myTrigger","default").build();
			scheduler.scheduleJob(jobDetail,trigger);
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42806727/article/details/89349245