quartz动态修改时间

//调度工具类
public   class  QuartzManage {  
    private   static  SchedulerFactory sf =  new  StdSchedulerFactory();  
    private   static  String JOB_GROUP_NAME =  "e100egroup" ;  
    private   static  String TRIGGER_GROUP_NAME =  "e100etrigger" ;  
   
  //根据作业,存储jobDetail信息,修改触发器时间的时候用
    private static HashMap<String,JobDetail> hsmpJobDetail=new HashMap<String,JobDetail>();
 
   
   
    public   static   void  startJob(String jobName, Job job, String time,HashMap hsmpParm)  
            throws  SchedulerException, ParseException {  
        Scheduler sched = sf.getScheduler();  
  
       JobDetail jobDetail = new  JobDetail();  
        jobDetail.setName(jobName);  
        jobDetail.setGroup(JOB_GROUP_NAME);  
        jobDetail.setJobClass(job.getClass());
    
        //往job里面传递参数
        jobDetail.getJobDataMap().put("hsmpParm", hsmpParm);
  
        CronTrigger trigger = new  CronTrigger(jobName, TRIGGER_GROUP_NAME);  
        trigger.setCronExpression(time);  
        sched.scheduleJob(jobDetail, trigger);  
       
        hsmpJobDetail.put(jobName, jobDetail);
  
        if  (!sched.isShutdown()) {  
            sched.start();  
        }  
    }  
  
 
    public   static   void  modifyJobTime(String jobName, Job job, String time)  
            throws  SchedulerException, ParseException{  
        Scheduler sched = sf.getScheduler();  
        Trigger trigger = sched.getTrigger(jobName,  
                TRIGGER_GROUP_NAME);  
        if  (trigger !=  null ) {  
            CronTrigger ct = (CronTrigger) trigger;  
            // 移除当前进程的Job   
            sched.deleteJob(jobName, JOB_GROUP_NAME);  
            // 修改Trigger   
            ct.setCronExpression(time);  
           JobDetail jobDetai= hsmpJobDetail.get(jobName);
           if(jobDetai!=null){
           sched.scheduleJob(jobDetai,ct);
           System.out.println("更新调度任务 "  + ct.getJobName()+" 成功");
           }else{
        System.out.println("更新调度任务 "  + ct.getJobName()+" 失败");
           }
        }  
    }   
   
}

    //作业类
public   class  JobTask  implements  Job {  
  //private final static String LOG_NAME_COMM = "QUARTZCOMM";
 
    public   void  execute(JobExecutionContext context)  
            throws  JobExecutionException {  
     HashMap<String,String> hsmpParm=(HashMap<String,String>)context.getJobDetail().getJobDataMap().get("hsmpParm");
     String scheduleId=hsmpParm.get("scheduleId");
     String scheduleName=hsmpParm.get("scheduleName");
     
     System.out.println(FuncDate.toDate(new Date(), "yyyy-MM-dd HH:mm:ss")+"  执行..... "+scheduleName+" ....开始");
     
    }  
  
}

//测试调度任务
public   class  QuartzMain {  
    public   static   void  main(String[] args)  throws  Exception {  
       
     JobTask job = new  JobTask(); 
   
     //传递到作业类的参数
     HashMap<String, String> hashMap=new HashMap<String, String>();
     hashMap.put("scheduleId", "123456789");
       hashMap.put("scheduleName", "渠道开关控制");
       
       //加载调度任务
        QuartzManage.startJob("ming" , job,  "0/5 * 16 * * ? *" ,hashMap);
       
     Thread.sleep(1000*60*2);
        //修改调度任务时间
        QuartzManage.modifyJobTime("ming" , job,  "0/10 * 16 * * ? *" );
 
    }  
}

时间: 2024-10-23 13:04:15

quartz动态修改时间的相关文章

spring quartz动态修改执行时间

1.获取schedule <bean name="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean=&q

任务调度开源框架Quartz动态添加、修改和删除定时任务

Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联.整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业.并且还能和Spring配置整合使用.Quartz在功能上远远超越

Quartz 在 Spring 中如何动态配置时间--转

原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间,非常easy.比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好. Spring配置文件 引用 <bean id="jobDetail&quo

Quartz动态添加、修改和删除定时任务

任务调度开源框架Quartz动态添加.修改和删除定时任务 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联.整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业.并且还

Quartz总结(四):动态修改定时器二

前文:http://www.cnblogs.com/LiuChunfu/p/5598806.html 提到了一种动态修改定时器的方法, 其本质就是在job方法中注入Schedular的对象,从Schedular中获取Trigger(触发器),然后修改触发器的条件,重新启动. 前文中的方法,其实已经涉及到了循环调用. Job类 => Job => Trigger => Schedular =>Job类. 这样是很容易发生问题的,也确实在实际项目中发生了问题,特别是当Schedular

Spring+quartz 动态任务调度

需求是这样的:系统中会有很多的执行时间,三个或者四个这样,不确定,以后可能是五个!当用户在页面添加执行时间时,我们后台也要对应执行用户添加的时间. 数据库设计: DROP TABLE IF EXISTS `test_time_task`; CREATE TABLE `test_time_task` ( `status` int(11) DEFAULT NULL COMMENT '状态:0为正常,1为禁用', `job` varchar(255) CHARACTER SET utf8 DEFAUL

Quartz动态配置表达的方法

在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间,非常easy.比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好. Spring配置文件 Xml代码?? <bean?id="jobDetail"?class="org.springframework.

任务调度(二)——jdk自带的Timer 动态修改任务执行计划

上一篇博文<任务调度(一)--jdk自带的Timer>中,简单介绍了一下Timer,本文将分享一下如何动态修改Timer制定的计划. 先上代码: package com.tgb.ccl.schema.dynamic; import java.util.Date; /** * 可动态修改的任务 * * @author arron * @date 2015年5月9日 下午1:52:15 * @version 1.0 */ public class DynamicTimerTask extends

Spring4整合quartz2.2.3,quartz动态任务

Spring4整合quartz2.2.3,quartz动态任务 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年9月6日 http://www.cnblogs.com/fanshuyao/ 可以直接看总结篇: http://www.cnblogs.com/fa