zoukankan      html  css  js  c++  java
  • 简单看下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
     
  • 相关阅读:
    手把手教你开发Chrome扩展二:为html添加行为
    使用Quartz.NET实现定时发送电子邮件
    手把手教你开发Chrome扩展三:关于本地存储数据
    Android中调用Web Services
    nestedlist的学习
    overlays、picker理解解析
    navigationview的理解
    bBank 更新记录(最后更新:201076)
    开博
    javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
  • 原文地址:https://www.cnblogs.com/ysq0908/p/12206121.html
Copyright © 2011-2022 走看看