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());
}
}

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

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

  1. spring中的任务调度Quartz

    Spring 整合 Quartz 任务调度 主要有两种方式. Quartz的官网:http://www.quartz-scheduler.org/ 这两种只是一些配置文件简单配置就OK了,但是根本无法 ...

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

    quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...

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

    quartz2.2.1集群调度机制调研及源码分析 原文地址:http://demo.netfoucs.com/gklifg/article/details/27090179 引言quartz集群架构调 ...

  4. quartz群调查调度机制和源代码分析

    pageId=85056282#quartz集群调度机制调研及源代码分析-quartz2.2.1集群调度机制调研及源代码分析" style="color:rgb(59,115,17 ...

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

    转自集群调度机制调研及源码分析 quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 qurat ...

  6. Java任务调度框架之分布式调度框架XXL-Job介绍

    ​ Java任务调度框架之分布式调度框架XXL-Job介绍及快速入门 调度器使用场景: Java开发中经常会使用到定时任务:比如每月1号凌晨生成上个月的账单.比如每天凌晨1点对上一天的数据进行对账操作 ...

  7. spring 任务调度quartz

    简单记录一下spring任务调度quartz的例子 首先添加包 quartz-2.2.3.jar 然后写个简单的TestJob类 package com.job; import java.util.D ...

  8. Quartz.net(调度框架) 使用Mysql作为存储

    最近公司的做的项目中涉及到配置任务地址然后按照配置去目标地址提取相关的数据,所以今天上午在Internet上查看有关定时任务(调度任务)的相关信息,筛选半天然后查找到Quartz.net. Quart ...

  9. java任务调度quartz框架的小例子

    quartz是一个开源的作业调度框架,当然,java可以使用Timer来实现简单任务调度的功能,但Timer是单线程的设计方案,使得一个任务延迟会影响到其他的任务.java也可以使用Scheduled ...

随机推荐

  1. HDU1248--完全背包

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 天梯赛 L2-019. 悄悄关注 map

    L2-019. 悄悄关注 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 新浪微博上有个"悄悄关注",一个用 ...

  3. 第四届河南省ACM 节能 区间DP

    1001: 节 能 时间限制: 1 Sec  内存限制: 128 MB 提交: 21  解决: 9 [提交][状态][讨论版] 题目描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多 ...

  4. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. PHP设置环境变量

    如果提示php命令不存在.说明未设置.设置方法如下 方法一:直接运行命令 [PHP] 纯文本查看 复制代码 ? 1 export PATH=$PATH:/usr/local/xxxx/php/bin ...

  6. UWP Flyout浮动控件

    看见没,点击"Options"按钮,浮动出来一个界面,这个界面可以用xaml自定义. 如果要点击的控件又Flyout属性那么,可以直接按照下面用 <Button Conten ...

  7. SQL Server学习之路(三):“增删改查”之“增”

    0.目录 1.前言 2.通过SSMS添加数据 3.通过SQL语句添加数据 3.1 添加单条数据 3.2 添加多条数据 4.通过其他表导入数据 4.1 通过数据库中的其他表导入数据 4.2 通过exce ...

  8. 【GISer&&Painter】GISer

    基于上一篇OpenGL的渲染原理,这两周又陆续接触了一些关于WebGL绘图的一些内容,因为刚入门,很多东西又很晦涩,所以特意花了小半天的时间整理了一下,特此记录. 一   画布和画笔:创建Canvas ...

  9. java日期详解

    [TOC] 一.简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的地位比如joda. 文章主要对java日期处理的详解,用1.8可以不用joda. 1. 相关概念 首先 ...

  10. IntelliJ IDEA(五) :Settings(中)

    上篇介绍了Settings中的Appearance & Behavior和Keymap,这篇继续,将介绍Editor,Plugins,Version Control. 一.Editor(编辑) ...