简单看下Quartz

三种实现方法:
1) Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。 最早的时候就是这样写定时任务的。 (过时,不用)
2) 开源的第三方框架: Quartz 或者 elastic-job , 但是这个比较复杂和重量级,适用于分布式场景下的定时任务,可以根据需要多实例部署定时任务。(比较复杂)
3) 使用Spring提供的注解: @Schedule 。 如果定时任务执行时间较短,并且比较单一,可以使用这个注解。(简单,但不适用太多任务平行执行,执行时间短)

本实例中采用下面前两种方法:

串行方式:
1.使用spring中的注解: @Scheduled 和 @EnableScheduling
相对较简单

并行方式:
2.Quartz: extends QuartzJobBean
a.schedular使用两种方法存储调度信息:RAMJob(内存实现),JobStoreTX(JDBC,事务由Quartz管理)
实例中有测试过
采用jdbc方法,可以处理比较赋值的调度信息

3.TimerTask任务 (过时)

实例:
public static void main(String[] args) throws SchedulerException  {
System.out.println("test of start....");


//下面job进行并行方式执行

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

//*********************job1**************************
//创建job
JobDetail jobDetail = JobBuilder.newJob(MyTestJob.class).withIdentity("MyJob", "Group1").build();
//创建触发器 ,定义10s执行一次任务
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("tigger1","TGroup1")
.withSchedule(CronScheduleBuilder.cronSchedule("/10 * * * * ?")).build();
//将job,trigger加入到计划中scheduler
scheduler.scheduleJob(jobDetail,cronTrigger);


//*********************job2**************************
//创建job
JobDetail jobDetail2 = JobBuilder.newJob(MyTestQuartz.class).withIdentity("MyJob2", "Group2").build();
//创建触发器 ,定义5s执行一次任务
CronTrigger cronTrigger2 = TriggerBuilder.newTrigger().withIdentity("tigger2","TGroup2")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
//将job,trigger加入到计划中scheduler
scheduler.scheduleJob(jobDetail2,cronTrigger2);


//启动计划
scheduler.start();

//****************************************************************************
}
job1:
@Slf4j
public class MyTestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println("*********************start job***********************");
System.out.println("任务名称;"+jobExecutionContext.getJobDetail().getKey().getName());

String[] names = { "Jon", "Darin", "Bauke", "Hans", "Marc" };
List<String> list = Arrays.asList(names);

Stream.iterate(0, i -> i + 1).limit(list.size()).forEach(i -> {
try {
String s= list.get(i);
System.out.println("索引:"+i+",取值:"+s);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});

System.out.println("*********************end job***********************");
}
}
job2:
/**
* @author quanroon.ysq
* @version 1.0.0
* @date 2020/1/17 15:05
* @content 作业类,需要将作用加入配置的计划中。
* 1.创建schedule
* 2.创建job,并加入作业类
* 3.创建trigger,设置调度策略
* 4.将job,trigger,加入到schedule中。
* 5.完成任务定时调度
*/
public class MyTestQuartz extends QuartzJobBean {
private static int i=0;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
i++;
System.out.println("*****"+i+"*******");
}
}
对于使用
JobStoreTX(JDBC,事务由Quartz管理),请看我的github地址:稍后放在这里

参考文档,写的蛮详细(quartz的介绍:):https://www.cnblogs.com/kyleinjava/p/10432168.html
 
posted @ 2020-01-17 15:44  goodTOgreat  阅读(258)  评论(0编辑  收藏  举报