quartz和elastic-job任务调度的使用

quartz 任务调度逻辑梳理

引入jar包

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

1.创建任务调度器

public static Scheduler createScheduler() throws SchedulerException {
	SchedulerFactory schedulerFactory = new StdSchedulerFactory(); 		 				
	Scheduler scheduler = schedulerFactory.getScheduler();
	return scheduler;
}

2.创建要被执行的任务

public static JobDetail createJob() {
	JobBuilder jobBuilder = JobBuilder.newJob(DemoJob.class); //第五点创建demojob	
	jobBuilder.withIdentity("jobName","myJob");
	JobDetail jobDetail = jobBuilder.build();
	return jobDetail;
}

3.创建任务时间触发器

public static Trigger createTrigger() {
	// 创建时间触发器,按日历调度
	CronTrigger trigger = TriggerBuilder.newTrigger()
	.withIdentity("triggerName","myTrigger")
	.startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) /*每两秒触发一次*/
	.build();
	return trigger;
}

4.任务调度主程序

public static void main(String[] args) throws SchedulerException {
	// 创建一个作业任务调度器
	Scheduler scheduler = createScheduler(); 
	// 创建一个被调度的任务
	JobDetail job = createJob();
	// 创建一个任务时间触发器
	 Trigger trigger = createTrigger();
	// 使用调度器按照时间触发器执行这个作业任务 
	scheduler.scheduleJob(job,trigger);
	scheduler.start();
}

5.创建一个job,实现job接口

public class DemoJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 
    	System.out.println("定时任务被执行了");
	} 
}

elastic-job分布式调度框架

它是基于quartz二次开发的,在分布式环境中,任务能按调度策略进行,能够避免同一任务多实例重复进行
elastic使用
1.安装zookeeper
2.引入jar包

<dependency>
	<groupId>com.dangdang</groupId> 
	<artifactId>elastic-job-lite-core</artifactId>
	<version>2.1.5</version>
</dependency>

3.配置zookeeper

ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("localhost:2181","data-archive-job");
CoordinatorRegistryCenter coordinatorRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
coordinatorRegistryCenter.init();

4.配置任务

//1表示分片执行即分成1片执行
JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("archive-job","*/2 * * * * ?",1).build();
SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration,BackupJob.class.getName());

5.配置任务类

public class BackupJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
	//任务逻辑
	System.out.println("elastic job 被执行了");
}

6.启动任务

new JobScheduler(coordinatorRegistryCenter, LiteJobConfiguration.newBuilder(simpleJobConfiguration).build()).init();

当创建多个实例的时候只有一个实例会作为leader来执行定时任务,谁先创建leader节点谁就是领导者,在instances节点中增加或减少子节点(即增加或减少任务调度的实例),都会触发leader重新选举,即使老leader没有挂掉,但是instances节点发生变化,也会触发重新选举
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值