• Quartz


    java 任务调度:

    public class TimeTaskDemo {
        public static void main(String[] args) {
            Timer timer=new Timer();
            timer.schedule(new TimerTask() {
                public void run() {
                    System.out.println("==========>");
                }
            },new Date(System.currentTimeMillis()+1000), 200);
        }
    }
    View Code

    一、Quartz

    Quartz就是一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细.。
    Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述。

    Quartz 调度包的两个基本单元是作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度. 
    调度器:调度器用于将与作业触发器关联,一个作业可关联多个触发器,这样每个触发器被可以触发的作业执行;一个触发器可用于控制多个作业,触发触发器时, 
    全部作业将获得调度。Quartz的调度器由Scheduler接口体现.。
    job(作业):只需实现org.quartz.job接口即可.Job接口包含一个方法 execute(),execute方法体是被调度的作业体。一旦实现Job接口和execute()方法,Quartz确定作业运作的时候,它将调用 execute()方法体。 Job是一个接口只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap实例中 。

    触发器:有SimpleTrigger和CronTrigger两种类型。

    1、创建一个作业

    public class HelloJob {
        private static Logger logger = LoggerFactory.getLogger(HelloJob.class);  
        public HelloJob() {  }  
        public void execute(JobExecutionContext context) throws JobExecutionException {  
            logger.error("我是小禾点点: " + new Date());  
        }  
    }

    2、调度

     public static void run() throws Exception {  
               // 通过SchedulerFactory获取一个调度器实例  
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
                //引进作业程序  
                JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job2", "group1").build();  
                //创建触发器并设置执行时间
                CronTrigger trigger =TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")).build();
                //作业和触发器设置到调度器中  
                Date ft = scheduler.scheduleJob(job, trigger);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
                System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: " + trigger.getCronExpression());
                //启动调度器  
                scheduler.start(); 
                //scheduler.shutdown();
            } 
  • 相关阅读:
    [Angular] @ContentChild and ngAfterContentInit
    [Angular] Content Projection with ng-content
    [ES2016] Check if an array contains an item using Array.prototype.includes
    [Ramda] Handle Errors in Ramda Pipelines with tryCatch
    [React Native] Installing and Linking Modules with Native Code in React Native
    [Ramda] Refactor to Point Free Functions with Ramda using compose and converge
    [React Native] Writing Platform-Specific Components for iOS and Android in React Native
    [Redux] Avoid action type naming conflicts
    paip.索引优化---sql distict—order by 法
    DL,DT,DD,比传统table更语义,解析更快的table列表方式
  • 原文地址:https://www.cnblogs.com/jalja/p/4598191.html
Copyright © 2020-2023  润新知