zoukankan      html  css  js  c++  java
  • 定时任务

    定时任务场景:

      数据同步,交易信息,定时发送数据,活动推送 

      主题:分布式任务调度平台分布式领域中集群的话,保证定时Job幂等性   

    Java定时job方案:

      Thread  TimerTast 线程池 quartz SpringBoot 内置schedul

    1、Thread:

    package com.toov5.JobTest;
    
    public class Demo01 {
       
        static long count = 0;
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                
                @Override
                public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                        count++;
                        System.out.println(count);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                    
                }
            };
            
            Thread thread = new Thread(runnable);
            thread.start();
        }
         
        
    }

    TimerTask

    package com.toov5.JobTest;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class Demo02 {
        
        private static int count = 0;
        
        public static void main(String[] args) {
            //属于JDK自带的 util包里的哦
        TimerTask timerTask    = new TimerTask() {
                
                @Override
                public void run() {
                    System.out.println(++count); 
                    
                }
            };
            //定义触发规则
            Timer timer = new Timer();
            //天数
            long delay = 0;  //0表示任意的
            long period = 1000;
            timer.scheduleAtFixedRate(timerTask, delay, period);
        }
        
    }

    线程池:

    package com.toov5.JobTest;
    
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    public class Demo03 {
        private static int count = 0;
    
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
    
                @Override
                public void run() {
                    System.out.println(++count);
    
                }
            };
            ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
            service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
    
        }
    
    }

    Quartz: http://cron.qqe2.com/

    package com.toov5.quartz;
    
    import java.util.Date;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class TestJob {
         public static void main(String[] args) throws SchedulerException {
             //1.创建Scheduler的工厂
             SchedulerFactory sf = new StdSchedulerFactory();
             //2.从工厂中获取调度器实例
             Scheduler scheduler = sf.getScheduler();
    
    
             //3.创建JobDetail  Job的详细信息  制定哪个job的
             JobDetail jb = JobBuilder.newJob(MyJob.class)
                     .withDescription("this is a ram job") //job的描述
                     .withIdentity("ramJob", "ramGroup") //job 的name和group
                     .build();
    
             //任务运行的时间,SimpleSchedle类型触发器有效
             long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
             Date statTime = new Date(time);
    
             //4.创建Trigger
                 //使用SimpleScheduleBuilder或者CronScheduleBuilder
             Trigger t = TriggerBuilder.newTrigger()
                         .withDescription("")
                         .withIdentity("ramTrigger", "ramTriggerGroup")
                         //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                         .startAt(statTime)  //默认当前时间启动
                         .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
                         .build();
    
             //5.注册任务和定时器
             scheduler.scheduleJob(jb, t);
    
             //6.启动 调度器
             scheduler.start();
    
        }
    }

    要跑的业务:

    package com.toov5.quartz;
    
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class MyJob implements Job {
        public void execute(JobExecutionContext context) throws JobExecutionException {
            //定时任务的 业务
            System.out.println("quartz MyJob date:" + new Date().getTime());
        }
    }

    每隔2s执行一次:

  • 相关阅读:
    写的好的功能参考地址
    碰撞检测原理
    懒加载原理的实现
    jQuery图片延迟加载插件jQuery.lazyload 的使用
    电子工厂生产楼职位解析
    打印条码方式
    条码打印二
    条码打印三
    CSS实现圆角矩形
    条码打印四
  • 原文地址:https://www.cnblogs.com/toov5/p/9932891.html
Copyright © 2011-2022 走看看