直接上代码

import org.apache.tools.ant.util.DateUtils;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar;
import java.util.Date;/*** @Description: 定时任务管理类* Created by zhangxb on 2017/2/10.*/
public class QuartzManager {private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";/*** @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名** @param jobName*            任务名* @param cls*            任务* @param time*            时间设置,参考quartz说明文档** @Title: QuartzManager.java*/@SuppressWarnings("unchecked")public static void addJob(String jobName, Class cls, String time,Object params) {try {Scheduler sched = gSchedulerFactory.getScheduler();JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类jobDetail.getJobDataMap().put("params", params);// 触发器CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组trigger.setCronExpression(time);// 触发器时间设定
            sched.scheduleJob(jobDetail, trigger);// 启动if (!sched.isShutdown()) {sched.start();}} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description: 添加一个定时任务** @param jobName*            任务名* @param jobGroupName*            任务组名* @param triggerName*            触发器名* @param triggerGroupName*            触发器组名* @param jobClass*            任务* @param time*            时间设置,参考quartz说明文档**/@SuppressWarnings("unchecked")public static void addJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName, Class jobClass,String time,Object params) {try {Scheduler sched = gSchedulerFactory.getScheduler();JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类jobDetail.getJobDataMap().put("params",params);// 触发器CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组trigger.setCronExpression(time);// 触发器时间设定
            sched.scheduleJob(jobDetail, trigger);} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)** @param jobName* @param time**/@SuppressWarnings("unchecked")public static void modifyJobTime(String jobName, String time) {try {Scheduler sched = gSchedulerFactory.getScheduler();CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME);if (trigger == null) {return;}String oldTime = trigger.getCronExpression();if (!oldTime.equalsIgnoreCase(time)) {JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);Class objJobClass = jobDetail.getJobClass();removeJob(jobName);addJob(jobName, objJobClass, time ,jobDetail.getJobDataMap());}} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description: 修改一个任务的触发时间**/public static void modifyJobTime(String triggerName,String triggerGroupName, String time) {try {Scheduler sched = gSchedulerFactory.getScheduler();CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName);if (trigger == null) {return;}String oldTime = trigger.getCronExpression();if (!oldTime.equalsIgnoreCase(time)) {CronTrigger ct = (CronTrigger) trigger;// 修改时间
                ct.setCronExpression(time);// 重启触发器
                sched.resumeTrigger(triggerName, triggerGroupName);}} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)** @param jobName**/public static void removeJob(String jobName) {try {Scheduler sched = gSchedulerFactory.getScheduler();sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description: 移除一个任务**/public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName) {try {Scheduler sched = gSchedulerFactory.getScheduler();sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器sched.deleteJob(jobName, jobGroupName);// 删除任务} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description:启动所有定时任务*/public static void startJobs() {try {Scheduler sched = gSchedulerFactory.getScheduler();sched.start();} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description:关闭所有定时任务**/public static void shutdownJobs() {try {Scheduler sched = gSchedulerFactory.getScheduler();if (!sched.isShutdown()) {sched.shutdown();}} catch (Exception e) {throw new RuntimeException(e);}}public static String formatTime(Date date){//0/1 * * * * ?String time = DateUtils.format( date, "s m h d * ?");System.out.println(time);return time;}
}

测试类

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;/*** @Description: 任务执行类* Created by zhangxb on 2017/2/10.*/
public class QuartzJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {Object params =   context.getJobDetail().getJobDataMap().get("params");System.out.println(params);System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "★★★★★★★★★★★");System.out.println("【移除定时】开始...");QuartzManager.removeJob((String)params);System.out.println("【移除定时】成功");}public static void main(String[] args) {try {String job_name = "动态任务调度";System.out.println("【系统启动】开始(每1秒输出一次)...");Calendar cal = Calendar.getInstance();cal.add( Calendar.SECOND,10);QuartzManager.addJob(job_name, QuartzJob.class, QuartzManager.formatTime(cal.getTime()),job_name);Thread.sleep(11);cal.setTime( new Date());cal.add( Calendar.SECOND,10);QuartzManager.addJob(job_name+1, QuartzJob.class, QuartzManager.formatTime(cal.getTime()),job_name+1);Thread.sleep(11);
//            System.out.println("【修改时间】开始(每2秒输出一次)...");
//            QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?");
//            Thread.sleep(6000);
//            System.out.println("【移除定时】开始...");
//            QuartzManager.removeJob(job_name);
//            System.out.println("【移除定时】成功");
//
//            System.out.println("【再次添加定时任务】开始(每10秒输出一次)...");
//            QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?");
//            Thread.sleep(60000);
//            System.out.println("【移除定时】开始...");
//            QuartzManager.removeJob(job_name);
//            System.out.println("【移除定时】成功");} catch (Exception e) {e.printStackTrace();}}
}

不过最后发现,还是没法做动态延迟。后面用延时mq实现的。

转载于:https://www.cnblogs.com/foreverzxb/p/6491190.html

java 动态增加定时任务相关推荐

  1. java 数组的长度如何增加,用Java动态增加任意类型数组的长度

    用Java动态增加任意类型数组的长度 如果你需要动态增加数组大小: public  int[]  expandArray(int[]  a,  int  size)  { if  (size  < ...

  2. java动态设置定时任务

    由于业务需求,需要提供一个能够让用户动态配置定时任务的入口,定时去同步数据 1.简单的业务处理,直接使用@Scheduled注解就能开启定时任务,例如在方法上@Scheduled(cron = &qu ...

  3. JAVA动态增加枚举项

    前言 在项目中,会存在很多枚举,比如下面颜色和水果的枚举,COLOR[RED(1),GREEN(2),BLUE(3)],FRUIT[APPLE(4),BANANA(5),ORANGE(6)],但是问题 ...

  4. java 动态增加控件_在ngIf中动态添加组件

    我有一些代码可以动态地添加/删除我的一个页面组件 . 这似乎工作得很好,我的方法基于Rob Wormald的真棒Ng2 Advanced Talk . 以标准方式执行操作如下所示: @Componen ...

  5. java 动态增加线程,java - 在Java中动态停止线程 - SO中文参考 - www.soinside.com

    我需要一些有关线程的帮助,我需要制作一个可以动态关闭和打开线程的程序(这意味着当我需要一个线程时,它将运行,如果不再需要它,它将停止),现在我的问题是?如果我仅终止该线程的run方法,将其计为线程停止 ...

  6. SpringBoot JAVA 动态设置定时任务执行时间

    一 .核心代码 @Component @EnableScheduling public class ScheduleService implements SchedulingConfigurer {p ...

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

    场景 这几天做项目的时候遇到了个状态自动切换的场景.该场景具体情况如下: 用户可以创建多个活动 活动有开始时间和结束时间 活动有个状态:未上线.未开始(上线但未到开始时间).进行中(上线且处于开始时间 ...

  8. Java实现动态增加和切换数据源以访问不同的数据库

    有时候我们需要把数据存放到多个数据库中,但是一个数据源只能访问一个数据库.想访问不同的数据库,那么就需要切换不同的数据源.有时候我们要切换的数据源是未知的,在程序运行的过程中才能知道要访问哪一个数据库 ...

  9. java定时执行sql语句_spring中使用quartz动态添加定时任务执行sql

    系统用来每天插入视图数据... 一.数据库表设计 1.接口配置表(t_m_db_interface_config) 2.接口日志表(t_m_db_interface_log) 3.前端配置页面 查询页 ...

最新文章

  1. leetcode--Two Sum
  2. 人类为什么会同情机器人,是否需要禁止虐待机器人
  3. 工业互联网 — TSN — 技术架构
  4. JAVA学习笔记系列4-Eclipse版本选择
  5. Apache ZooKeeper - 使用原生的API操作ZK
  6. 【Grafana】函数
  7. Madagascar环境下编程
  8. vue实现上下滑动翻页_vue 实现滚动到底部翻页效果(pc端)
  9. OS X 使用技巧——轻松地调整窗口大小
  10. 华为云·云享专家公开课:45分钟掌握Python项目部署与调度核心逻辑直播
  11. django 1.8 官方文档翻译: 3-3-2 File对象
  12. Ubuntu下升级安装gcc-7.5.0教程
  13. ERP实施过程中的沟通管理研究
  14. unity webPlayer
  15. Adobe CS3 Keygens
  16. 科普:ARM的授权方式
  17. php中503代表什么,php 503是什么错误?_后端开发
  18. HTML怎么给文本添加删除线?(代码教程)
  19. windows terminal ssh连接
  20. 试看5分钟视频python_不会Python吗?几分钟看完资深程序员给你的Python入门指南...

热门文章

  1. iOS开发-UIScrollView原理
  2. SQL存储过程分页(通用的拼接SQL语句思路实现)
  3. 全排列函数、组合函数
  4. 【转载】使用Imaging组件加载GIF动画
  5. 小学计算机三年级课程目录,小学生信息技术课本目录.doc
  6. b站在线解析_这款游戏被全B站所唾弃,每个月却依然有5000万玩家坚持在线?!...
  7. VS2010发布、打包安装程序超全超详细
  8. 前端工业物联网开发(Electron + Typescript + Vue)
  9. excel实战应用案例100讲(十三)-使用Python 对 Excel文件进行批量操作
  10. 计算机工作原理 仿真,虚拟DCS仿真工作原理