Quartz

Posted 贪吃蛇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartz相关的知识,希望对你有一定的参考价值。

简介

  开源的完全使用JAVA开发的一种时间调度框架,可多线程同步执行。

使用

  quartz有两种使用方式:RAM、JDBC。任务的调度也有两种方式:SimpleSchedule、CronSchedule

  简单调用

  •     第一步首先要导入 Quartz 的jar包,官网有zip文件可供下载,maven 项目则需要导入依赖
    <!-- quartz begin -->
      <dependency>
       <groupId>org.quartz-scheduler</groupId>
       <artifactId>quartz</artifactId>
       <version>2.2.1</version>
     </dependency>
     <dependency>
       <groupId>org.quartz-scheduler</groupId>
       <artifactId>quartz-jobs</artifactId>
       <version>2.2.1</version>
     </dependency> 
     <!-- quartz end -->
     
     <!-- log -->
     <dependency>  
        <groupId>org.slf4j</groupId>  
        <artifactId>slf4j-simple</artifactId>  
        <version>1.7.25</version>  
    </dependency>
  •               创建具体的任务
    package com.quartz.first;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class MyJob implements Job {
    
        private static final String NAME = "name";
        
        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
            
            System.out.println(" execute job() ...  ");
        }
    
    }
  •               测试
package com.quartz.first;

import java.util.Date;

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;

/**
 * 
 * 使用 RAM 方式定时
 * 
 * @author 丰志
 *
 */
public class RAMQuartz {

    public static void main(String[] args) throws SchedulerException {
        //1.创建Scheduler的工厂
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        //2.从工厂中获取调度器实例
        Scheduler scheduler = schedulerFactory.getScheduler();
        //3.创建JobDetail
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withDescription("this is a ram job") //job的描述
                .withIdentity("ramJob", "ramGroup") //job 的name和group
                .build();

//        jobDetail.getJobDataMap().put("name", "zhangsan"); //传参用与MyJob中获取参数    jobDataMap.get("name")
        
        //任务运行的时间,SimpleSchedle类型触发器有效
        long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
        Date statTime = new Date(time);

        //4.创建Trigger
        //使用SimpleScheduleBuilder或者CronScheduleBuilder
        Trigger trigger = TriggerBuilder.newTrigger()
                    .withDescription("")
                    .withIdentity("ramTrigger", "ramTriggerGroup")
                    .startAt(statTime)  //默认当前时间启动
//                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(10)) // 每个2秒钟执行一次,一共执行10次
//                    .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次,cron 秒、分、时、日、月、年、
                    .build();

        //5.注册任务和定时器
        scheduler.scheduleJob(jobDetail, trigger);
        //6.启动 调度器
        scheduler.start();
    }
}

 

 

 

 

 

以上是关于Quartz的主要内容,如果未能解决你的问题,请参考以下文章

一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

Quartz定时代码实现

Quartz使用一

我在java项目中加了spring支持,加了quartz-1.6.1.jar包,在使用quartz实现任务调用时的代码如下:

springboot整合quartz项目使用(含完整代码)

Hosted Services+Quartz实现定时任务调度