任务调度 -----> quartz 不同时间间隔调度任务

Quartz



  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。

  目的:最近在想弄一下不同的时间段调度任务,不是以往那样在相同的间隔调度,而是不同的间隔时间,参考了一下Quartz官网和一些前辈的,加上自己总结的改进的方法

  参考文章:Quartz使用总结

  Quartz的API: http://www.quartz-scheduler.org/api/2.1.7/index.html

  jar下载地址:http://www.quartz-scheduler.org/downloads/

  Maven:

<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>  

  主要思想:将你要想要调度的时间隔间传入,但是是使用一个实列 

代码:

package com.test.util;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * @author zhouguanglin
 * @date 2018/1/6 11:17
 */
public class QuartzTest{
    private  static volatile  Scheduler scheduler=null;
    private static List<Integer> list=new ArrayList<Integer>();
    static {
        list.add(5);
        list.add(10);
        list.add(5);
        list.add(10);
    }
    //单列模式创建scheduler
    public static Scheduler getScheduler(){
        if (scheduler==null) {
            synchronized (QuartzTest.class) {
                try {
                    if (scheduler==null) {
                        scheduler = StdSchedulerFactory.getDefaultScheduler();
                    }
                } catch (SchedulerException e) {
                    e.printStackTrace();
                }
            }
        }
        return scheduler;
    }
    //任务调度
    public static Scheduler getSchedulerTask(String taskName,int time){
        Scheduler scheduler=getScheduler();

        try {
            //看是否启动
            if (!scheduler.isStarted()){
                scheduler.start();
            }
            //运行一段时间后关闭
            Thread.sleep(time*1000);
            //定义一个Trigger
            Trigger trigger = newTrigger().withIdentity("trigger", "group") //定义name/group
                    .startAt(new Date(time))//在这个时间之后发生            //这里还可以用withwithSchedule()来控制调度情况 其中添加simpleSchedule()来控制间隔多少执行一次,执行多少次,还是一直执行
                    .build();
            //定义一个JobDetail
            JobDetail job = newJob(QuartzTask.class) //定义Job类为QuartzTask类,这是真正的执行逻辑所在
                    .withIdentity("job", "group") //定义name/group
                    .usingJobData("name", taskName) //定义属性
                    .usingJobData("zhou","zhouguanglin")
                    .build();
            //加入这个调度
            scheduler.scheduleJob(job, trigger);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return scheduler;
    }
    public static void main(String[] args) throws SchedulerException, InterruptedException {

       for (int j=0;j<list.size();j++) {
           getSchedulerTask("任务:"+j,list.get(j));
       }
       //最后将scheduler关闭
        if (!scheduler.isShutdown()) {
           scheduler.shutdown();
        }
    }
}

真正的调度的任务逻辑在这:

package com.test.util;

import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * @author zhouguanglin
 * @date 2018/1/6 15:09
 */
public class QuartzTask implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //这里是读取上下文,得到其中的东西,只可意会不可言传,,,就好像Spring的感觉差不错
        JobDetail detail = jobExecutionContext.getJobDetail();
        String name = detail.getJobDataMap().getString("name");
       String zhou=detail.getJobDataMap().getString("zhou");
        System.out.println("任务开始。。。-------name:"+name+"   zhou:"+zhou);
        System.out.println(System.currentTimeMillis());
    }
}

                 【版本声明】本文为博主原创文章,转载请注明出处

原文地址:https://www.cnblogs.com/zhouguanglin/p/8214918.html

时间: 2024-10-28 09:20:18

任务调度 -----> quartz 不同时间间隔调度任务的相关文章

quartz集群调度机制调研及源码分析---转载

quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的java任务调度框架,功能强大配置灵活.在企业应用中占重要地位.quratz在集群环境中的使用方式是每个企业级系统都要考虑的问题.早在2006年,在ITeye上就有一篇关于quratz集群方案的讨论:http://www.iteye.com/topic/40970 ITeye创始人@Robbin在8楼

(1)quartz集群调度机制调研及源码分析---转载

quartz2.2.1集群调度机制调研及源码分析 原文地址:http://demo.netfoucs.com/gklifg/article/details/27090179 引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的java任务调度框架,功能强大配置灵活.在企业应用中占重要地位.quratz在集群环境中的使用方式是每个企业级系统都要考虑的问题.早在2006年,在ITeye上就有一篇关于qu

quartz定时任务框架调度机制解析

转自集群调度机制调研及源码分析 quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的java任务调度框架,功能强大配置灵活.在企业应用中占重要地位.quratz在集群环境中的使用方式是每个企业级系统都要考虑的问题.早在2006年,在ITeye上就有一篇关于quratz集群方案的讨论:http://www.iteye.com/topic/40970 IT

任务调度 QUARTZ

任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commons-logging log4j sff4j 等jar包要添加进去,quartz的jar包则肯定必须 首先写一个类实现Job接口 Java代码   public class QuartzDemo implements Job{ @Override public void execute(JobExe

任务调度~Quartz.net实现简单的任务调试

任务调度类似于sqlserver中的作业,即按周期性执行某个程序,代码段,或者某种服务,在JAVA环境中出现了Quartz,它可以简单的实现任务的调试,而像lucene一样,它会有对于的.net版本,Quartz.net,今天我们来做一个简单的实验,其时很简单的实验: 环境:.net4.0+mvc3 功能:每1分钟去向一个文件里写日志(当然,如果你要调用某个服务,只要让它实现IJob接口即可. 所需要的程序集 首先在WEB.Config的configuration节点里做一些必要的配置 1 <c

SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap + Maven项目构建绝对开源平台

框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC.IOS.Android) 需要源码请加Q:3121026417   此处[源码获取地址] 框架简介: 项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化.服务化.原子化的方案,将功能模块进行

采用Windows服务任务调度Quartz.NET

Windows服务使用标准的Csharp编写,任务调度框架采用开源的Quartz.NET.    首先创建Windows服务-JobService     其次创建类库项目-JobLibrary    整体解决方案架构图如下:     在JobLibary中添加Quartz.NET的Nuget包引用,添加之后,vs会自动添加一系列的依赖项,这些依赖项是必须的,别手抖删掉了.            其次再添加Common.Logging.Log4Net1211的Nuget包,他是Log4net的另

定时任务调度Quartz.NET

你想让你的应用程序在凌晨一点自动干一些别的事情吗?或者说没隔一段时间来执行一些任务 使用Quartz.NET 下面用最短的时间带你入门 并可以应用各种定时场景 首先你要在你的项目中导入需要用到的包 可以通过Nuget安装Quartz.NET 先介绍三个名词 调度者(IScheduler) .工作(IJobDetail).触发器(ITrigger) 你要先创建一个调度者 , 一个工作, 一个触发器 我们也可以定义多个工作 ,多个触发器 ,让我们的调度者在触发器满足条件的时候去执行我们的工作 //实

任务调度--spring下的任务调度quartz

之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @author Administrator * */ public class DataBackup { //提供任务方法 - 任务实现的内容 public void backup(){ System.out.println("备份数据库"); } } spring的配置文件 <!-- 该配