java 动态添加定时器_quartz实现任务动态增加和删除

场景

这几天做项目的时候遇到了个状态自动切换的场景。该场景具体情况如下:

用户可以创建多个活动

活动有开始时间和结束时间

活动有个状态:未上线、未开始(上线但未到开始时间)、进行中(上线且处于开始时间和结束时间之间)、已结束(上线且处于活动结束时间之后)

在上诉条件下自动切换活动状态,切换时间点为:活动开始时间(未开始->进行中);活动结束时间(进行中->已结束)

分析

根据场景中出现的情况,一个定时器就可以解决问题,只需要添加定时任务在指定时间进行活动状态切换即可。可以在活动上线的时候为每个活动创建一个定时任务,由于活动可以在进行中下线,所以在执行上线操作的时候需要判断上线后的活动状态,然后根据活动当前状态创建当时任务;在活动下线的时候关闭该活动的任务。

java解决定时任务的方法较为常用的是有两种方法:java.util.Timer 和org.quartz;这两种方式各有起优缺点,Timer实现起来非常简单,只需要实现一个TimerTask即可进行定时任务调度,但是Timer定时任务存在几个缺点导致在实际开发中很少用其作为定时器,以下是timer和quartz相比的不足:

java定时器没有持久化机制

java定时器的日程管理不够灵活

java定时器没有使用线程池

java定时器么有确切的管理方案

生成环境中更多是使用quartz来做定时任务的开发,本文主要讲解quartz如何添加定时任务和删除定时任务。

quartz介绍

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

ecd206a0049c4cf3b92315363bf9cae4-01300000432684142301878143103.jpg

job quartz核心任务接口,实现execute方法即可

jobDetail quartz为调度器可以识别的任务详情对象,该对象包含任务的唯一key值,以及任务人发执行所需参数等

trigger 任务执行触发器,指定任务执行时间等

scheduler quartz核心调度器,将jobDetail和trigger结合起来调度定时任务

实现案例(并非解决上诉场景代码)

实现Job接口

package java;

import org.quartz.Job;

import org.quartz.JobDataMap;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

/**

* Created by Lethe on 2017/3/29.

* 该任务将在被触发的时候将输出: hello ${name}

*/

public class QuartzJob implements Job {

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();

System.out.println("hello "+ map.getString("name"));

}

}

任务调度

package org.hanmeis;

import org.quartz.JobDataMap;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.impl.JobDetailImpl;

import org.quartz.impl.StdSchedulerFactory;

import org.quartz.impl.triggers.CronTriggerImpl;

import java.text.ParseException;

/**

* Created by Lethe on 2017/3/29.

*/

public class SchedulerTest {

public static void main(String[] args) throws SchedulerException, ParseException {

// 构造调度器,使用标准调度器工厂获取默认的调度器

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

JobDataMap dataMap = new JobDataMap();

dataMap.put("name", "world");

// 构造JobDetail,使用默认的JobDetailImpl类

JobDetailImpl detail = new JobDetailImpl();

detail.setJobClass(QuartzJob.class);

detail.setJobDataMap(dataMap);

detail.setName("testJob");

// 构造Trigger,使用CronTrigger

CronTriggerImpl cronTrigger = new CronTriggerImpl();

cronTrigger.setCronExpression("00 * 15 29 3 ? 2017");// 如果仅需在指定时间执行一次任务,则表达式一般写法为:00 50 15 29 3 ? 2017(表示在2017-03-29 15:50:00执行任务)

cronTrigger.setName("testTrigger");

// 调度任务

scheduler.scheduleJob(detail, cronTrigger);

}

}

任务动态增加和删除

scheduler本身提供任务的装载、卸载及刷新等接口

Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException;

Date scheduleJob(Trigger trigger) throws SchedulerException;

void scheduleJobs(Map> triggersAndJobs, boolean replace) throws SchedulerException;

void scheduleJob(JobDetail jobDetail, Set extends Trigger> triggersForJob, boolean replace) throws SchedulerException;

boolean unscheduleJob(TriggerKey triggerKey) throws SchedulerException;

boolean unscheduleJobs(List triggerKeys) throws SchedulerException;

Date rescheduleJob(TriggerKey triggerKey, Trigger newTrigger) throws SchedulerException;

引用

quartz[互动百科]:http://www.baike.com/wiki/Quartz

Timer和spring的Quartz两种定时器的区别[CSDN]:http://blog.csdn.net/zlxdream815/article/details/8177574

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来IT的三驾马车:AI、物联网和混合云

来源:物联网智库 概要:未来的信息技术系统日益专注于数据在哪里生成和处理、数据如何提供和收集,以及这些数据移动起来有多快。找到一条最高效的路径是关键。 物联网、AI和混合云是同一个三角形的三条边,是同一条凳子的三条腿&…

梅宏院士:软件定义的未来——万物皆可互联,一切均可编程 | CNCC 2017

作者:杨文 摘要:结合当下的人工智能热潮,梅宏教授认为我们正在进入一个软件定义的时代。软件定义的技术本质是把原先一体化的硬件设施打破,将基础硬件虚拟化并提供标准化的基本功能,然后通过管控软件,控制其…

php字符串转int,php怎样将字符串转为int类型

php将字符串转为int类型的方法:可以利用内置函数intval()来实现。intval()函数用于获取变量的整数值,如果执行成功则返回integer值,如果执行失败则返回0,例如:【intval(“1”)】。函数介绍:intval() 函数用…

对抗攻击最新研究:仅修改「一个像素」即可骗过神经网络!

编译:BaymaxZ 作者:Jiawei Su、Danilo Vasconcellos Vargas、Sakurai Kouichi(九州大学) 摘要:在图像识别领域,基于DNN的方法克服了传统的图像处理技术,甚至达到媲美人类的结果。 最近的研究证实…

php 去掉不可见字符串,php删除不可见的Unicode字符

在论坛/社区中一般帖子/文章的标题肯定是要求不为空的,但是今天发现了一个神奇的事情,我在后台php代码中限制了title不能为空。if(preg_match(/^\s*$/, $val)) return false;但是神奇的发现在数据库中有几篇文章文章的title是空的(眼睛看起来)而且鼠标点…

李飞飞新研究:基于深度学习和视觉化语言来了解不同物体间的关系

来源:凤凰科技 概要:最近她所在的实验室正在做一项新研究,基于深度学习和视觉化语言模式了解不同物体之间的关系。 2017未来科学大奖颁奖典礼暨未来论坛年会28、29日在京举办,斯坦福大学终身教授、谷歌云首席科学家李飞飞在人工智…

php设置文件权限问题,php以fastCGI的方式运行时文件系统权限问题及解决方法

今天准备将一个php demo放在IIS下运行,网站在IIS下的配置是这样的:应用程序池是集成模式下的.net framework 2.0(2.0或4.0没什么关系,因为php以fastCGI的方式在跑), 应用程序池标识配置为IIS内置的NETWORKSERVICE, 使用的认证方式为匿名身份验…

马化腾公开信:AI将成为基础设施,腾讯要打造“数字生态共同体”

来源:亿欧 概要:马化腾认为,云计算、大数据、人工智能等技术逐渐成为新型基础设施。在数字化背景下,不同产业和区域的生态之间,开始发生越来越多的关联。 马化腾认为,云计算、大数据、人工智能等技术逐渐成…

来认识世界上第一支AI基金:模仿股票分析师 365天无间断工作

来源:机械鸡 概要:本周,EquBot公司和ETF经理集团(ETFManagers Group或ETFMG)合作推出了世界第一支人工智能ETF(ETF:交易型开放式指数基金)。 本周,EquBot公司和ETF经理集…

中国研制出首款搭载寒武纪AI芯片的人工智能服务器

来源: 澎湃、新华网 摘要:在线推理业务不同于离线训练,推理不需要密集的计算能力,而是需要及时响应。 10月30日从我国高性能计算领军企业中科曙光获悉,中科曙光近日成功研…

开发java流程步骤,优秀Java开发人员的10个步骤

一、对OO原则有很强的基础和理解对于Java开发人员来说,必须对面向对象编程有很强的理解。没有在OOPS上有很强的基础,就不能实现像Java这样的面向对象编程语言的美。如果你不知道什么是OOPS,即使使用的是OOP语言,可能仍然在以过程的…

干货!解读2016-2017全球人工智能技术及产业发展的现状及趋势~

来源: 龙为科技 摘要:报告围绕人工智能的技术原理和突破进行了重点阐述,深入分析了国外科技巨头企业在人工智能领域的布局和进展情况,概括总结了各国政府推动人工智能发展的政策措施。 国家工业信息安全发展研究中心(工…

自动化对就业没有影响?看看这张图再说

来源:36Kr 摘要:自动化就在所有人的眼皮底下进行着,大家现在才开始真正讨论其自动化未来可能会减少很大一部分人口的收入的潜在危险。 机器人远在天边近在眼前。我们不要再视而不见了。 我们正在面临第四次工业革命。很多人都在讨论其对未来的…

Gartner公布2018十大技术发展趋势 2025年AI重塑商业模式

来源: 智东西 摘要:智能数字格网将作为未来数字业务和生态系统的基础,IT领导者们在制定创新性决策时必须将其考虑在内,否则将面临巨大风险。 近日,全球领先的信息技术研究和顾问公司Gartner公布了将在2018年对大部分企…

全球研发开支排名:亚马逊第一,BATJ排不上号!

来源: 全球人工智能 摘要:虽然亚马逊可能是研发领导者,但是截至目前缺乏关于它的准确数字。 这图是全球全球研发开支排名和相关数据: 全球研发开支领导者 对于旨在内部进行创新的那些公司来说,资金需要投入到公司收益…

matlab 怎么话3维图,用matlab画三维图形

将plot3d放在matlab根目录下,然后在窗口处输入椭球的一般方程就行了。注意要把等式右边的移过来,让右边为0.椭球和平面源代码:function plot3d(varargin)if ishandle(varargin{1})cax varargin{1};axes(cax);args{:} varargin{2:end};elsear…

任正非最新讲话透露:华为在加快开发统一的人工智能平台

来源:华为心声社区 概要:华为在人工智能方面,最有条件,也最容易找到感觉的,无疑是在GTS(全球技术服务)领域。 华为在人工智能方面,最有条件,也最容易找到感觉的&#xf…

Google智能生态链的演进路径

来源: 本翼资本CapitalWings 概要:谷歌作为全球最大的信息服务公司,自搜索引擎起家,现今已成为业务涵盖人工智能、智能家居、高速网络、医疗服务、生命科学、无人驾驶等前沿科技的Alphabet公司。 谷歌作为全球最大的信息服务公司&…

博世投资张翠波:自动驾驶需要突破芯片、传感器、深度学习算法等关键技术

来源:36氪 概要:基于博世的很多发现,整个无人驾驶的时间表可能如下:Level3级别的自动驾驶可能会在2020年后;Level4量产的时间是2020到2023年。 全球智能驾驶行业风起云涌,大量资本、技术、人才不断涌入。在…

解密DNA机器人“巨大的一小步”:血液循环中精准送达药物

来源:中国青年报 概要:作为纳米前沿科技快速发展的产物,加州理工大学“钱实验室”的DNA机器人步子又小又缓慢。 作为纳米前沿科技快速发展的产物,加州理工大学“钱实验室”的DNA机器人步子又小又缓慢。它走一步需要5分钟&#xff…