`
fackyou200
  • 浏览: 313821 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

quartz 添加任务调度

    博客分类:
  • java
 
阅读更多
package com.lec.util.job;  
  
import java.text.ParseException;  
import java.util.Date;  
import java.util.HashMap;  
import org.quartz.CronTrigger;  
import org.quartz.Job;  
import org.quartz.JobDetail;  
import org.quartz.Scheduler;  
import org.quartz.SchedulerException;  
import org.quartz.SchedulerFactory;  
import org.quartz.SimpleTrigger;  
import org.quartz.Trigger;  
import org.quartz.impl.StdSchedulerFactory;  
  
import com.lec.assurance.utils.StringHandler;  
  
/** 
 * CronTrigger任务调度器 
 * @author lcy 
 *  Dec 1, 2011 
 */  
public class CronTriggerRunner {  
    private static SchedulerFactory sf = new StdSchedulerFactory();  
      
      
      
    /** 
     * 根据任务名和任务组名查询一个任务 
     * @param jobName 
     * @param jobGroupName 
     * @return 
     * @throws SchedulerException 
     */  
    public static JobDetail getJob(String jobName,String jobGroupName) throws SchedulerException{  
        Scheduler sched = sf.getScheduler();  
        JobDetail jobDetail=sched.getJobDetail(jobName, jobGroupName);  
        if(jobDetail != null){  
            return jobDetail;  
        }  
        return null;  
    }  
         
    /** 
    * 添加一个CronTrigger定时任务 
    * @param jobName 任务名 
    * @param jobGroupName 任务组名 
    * @param triggerName 触发器名 
    * @param triggerGroupName 触发器组名 
    * @param job     任务 
    * @param time    时间设置,参考quartz说明文档 
    * @param params 传递参数 
    * @throws SchedulerException 
    * @throws ParseException  
    */  
    public static void addJob(String jobName,String jobGroupName,String triggerName,  
            String triggerGroupName,String time,HashMap<String,Object> params,  
            Job jobClass) throws SchedulerException, ParseException{  
       Scheduler sched = sf.getScheduler();  
       JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass.getClass());//任务名,任务组,任务执行类  
       if(params != null){  
              jobDetail.getJobDataMap().put("params",params);  
          }  
       //触发器  
       CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组  
       trigger.setCronExpression(time);//触发器时间设定  
       sched.scheduleJob(jobDetail,trigger);  
       if(!sched.isShutdown())  
           sched.start();  
    }  
      
    /** 
     * 添加一个SimpleTrigger定时任务 
     * @param jobName 任务名 
     * @param jobGroupName 任务组名 
     * @param triggerName 触发器名 
     * @param triggerGroupName 触发器组名 
     * @param startTime 开始时间 
     * @param repeatInterval 间隔时间 
     * @param repeatCount 调用次数 
     * @param jobClass 任务 
     * @param params 传递参数 
     * @throws SchedulerException 
     */  
    public static void addJob(String  jobName,String  jobGroup,  
            String  triggerName,String  triggerGroup,Date startTime,  
            Integer repeatInterval,Integer repeatCount,Job jobClass,  
            HashMap<String,Object> params) throws   
            SchedulerException{  
        JobDetail jobDetail = new JobDetail(jobName, jobGroup, jobClass.getClass());  
        if(params != null){  
             jobDetail.getJobDataMap().put("params",params);  
         }  
        //触发器  
        SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName, triggerGroup);  
        //设置开始时间  
        simpleTrigger.setStartTime(startTime);  
        //设置间隔时间  
        simpleTrigger.setRepeatInterval(repeatInterval);  
        //设置调用次数  
        simpleTrigger.setRepeatCount(repeatCount);  
          
        Scheduler sched = sf.getScheduler();  
        sched.scheduleJob(jobDetail,simpleTrigger);  
        if(!sched.isShutdown())  
           sched.start();  
    }  
         
    /**  
    * 根据任务名和任务组名修改任务的触发时间 
    * @param jobName 任务名 
    * @param jobGroupName 任务组名 
    * @param time 
    * @throws SchedulerException 
    * @throws ParseException 
    */  
    public static void modifyJobTime(String jobName,String jobGroupName,String time)   
            throws SchedulerException, ParseException{  
        Scheduler sched = sf.getScheduler();  
        Trigger[] trigger = sched.getTriggersOfJob(jobName,jobGroupName);  
        if(trigger != null){  
            for(int i=0;i<trigger.length;i++){  
                ((CronTrigger)trigger[i]).setCronExpression(time);  
                sched.resumeTrigger(trigger[i].getName(),trigger[i].getGroup());  
            }  
        }  
    }  
         
    /** 
    * 根据触发器名修改一个任务的触发时间 
    * @param triggerName触发器名 
    * @param triggerGroupName触发器组名 
    * @param time 
    * @throws SchedulerException 
    * @throws ParseException 
    */  
    public static void modifyTriggerTime(String triggerName,String triggerGroupName,  
                 String time)  throws SchedulerException, ParseException{  
        Scheduler sched = sf.getScheduler();  
        Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);  
        if(trigger != null){  
            //修改时间  
            ((CronTrigger)trigger).setCronExpression(time);  
           //重启触发器  
           sched.resumeTrigger(triggerName,triggerGroupName);  
       }  
    }  
      
    /** 
    * 移除任务 
    * @param jobName任务名 
    * @param jobGroupName任务组名 
    * @param triggerGroupName触发器组名 
    * @throws SchedulerException 
    */  
    public static void removeJob(String jobName,String jobGroupName,String triggerGroupName)   
            throws SchedulerException{  
      Scheduler sched = sf.getScheduler();  
      String[] triggerNames = sched.getTriggerNames(triggerGroupName);  
      if(triggerNames!=null){  
          for(int i=0;i<triggerNames.length;i++){  
              sched.pauseTrigger(triggerNames[i],triggerGroupName);//停止触发器  
              sched.unscheduleJob(triggerNames[i],triggerGroupName);//移除触发器   
          }  
      }  
      sched.deleteJob(jobName,jobGroupName);//删除任务  
    }  
         
    /** 
    * 移除一个任务 
    * @param jobName任务名 
    * @param jobGroupName任务组名 
    * @param triggerName触发器名 
    * @param triggerGroupName触发器组名 
    * @throws SchedulerException 
    */  
    public static void removeJob(String jobName,String jobGroupName,  
            String triggerName,String triggerGroupName)   
            throws SchedulerException{  
      Scheduler sched = sf.getScheduler();  
      sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器  
      sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器  
      sched.deleteJob(jobName,jobGroupName);//删除任务  
    }  
      
    /** 
     * 停止一个任务 需要注意的是:这里停止的job必须是实现InterruptableJob的 
     * @param jobName 
     * @param jobGroupName 
     * @throws SchedulerException 
     */  
    public static void stopJob(String jobName,String jobGroupName) throws SchedulerException {  
          Scheduler sched = sf.getScheduler();  
          sched.interrupt(jobName, jobGroupName);  
    }  
      
    /** 
     * 计算时间表达式 
     * @param second        秒 
     * @param minute        分 
     * @param hour          时 
     * @param day           日期 
     * @param month         月份 
     * @param week          星期 
     * @param year          年份 
     * @param isContactYear 是否包括年份 
     * @return 
     */  
    public static String getCexpress(String second,String minute,String hour,  
            String day,String month,String week,String year,boolean isContactYear) {  
        String cexpress="";  
        //秒,默认为"0" 取值范围:0-59  
        if(StringHandler.isValidStr(second)){  
            cexpress+=Integer.parseInt(second)+" ";  
        }else{  
            cexpress+="0 ";  
        }  
          
        /** 
         * 分 取值范围:0-59 
         * 默认为"*"      表示每一分钟 
         * 如果是0 12     表示整12:00触发 
         * 如果是0/5 12   表示在每天下午12点到12:55期间的每5分钟触发 , 
         * 如果是0-5 12   表示12:00到12:05期间的每1分钟触发 
         * 如果是10,15 12 表示12:10和12:15触发 
         */  
        if(StringHandler.isValidStr(minute)){  
            cexpress+=minute+" ";  
        }else{  
            cexpress+="* ";  
        }  
          
        /** 
         * 小时 取值范围:0-23 
         * 默认为"*"      表示每一个小时 
         * 如果是0        表示凌晨触发 
         * 如果是0-5        表示凌晨到5:00期间 
         * 如果是10,15    表示10:00和15:00触发 
         */  
        if(StringHandler.isValidStr(hour)){  
            cexpress+=hour+" ";  
        }else{  
            cexpress+="* ";  
        }  
          
        /** 
         * 日期 取值范围:1-31 
         * 默认为"*" 表示每天 
         * 如果是15  表示每个月的15号 
         * 如果是L   表示每个月最后一天  
         * 注:在指定了星期的时候,把日期这里设置为"?" 
         */  
        if(StringHandler.isValidStr(day)){  
            cexpress+=day+" ";  
        }else{  
            cexpress+="* ";  
        }  
          
        /** 
         * 月份 取值范围:1-12 
         * 默认为"*"  表示每个月 
         * 如果是 12  表示12月份 
         */  
        if(StringHandler.isValidStr(month)){  
            cexpress+=month+" ";  
        }else{  
            cexpress+="* ";  
        }  
          
        /** 
         * 星期  取值范围:1-7 MON,TUE,WED,THU,FRI,SAT,SUN  其中1表示星期日,以此类推 
         * 默认为"?" 
         * 如果是WED      表示每个星期三 
         * 如果是MON-FRI  表示星期一到星期五 
         * 如果是6L       表示每月最后一个星期五 
         * 如果是6#3      表示每月第三个星期五 
         */  
        if(StringHandler.isValidStr(week)){  
            cexpress+=week+" ";  
        }else{  
            cexpress+="? ";  
        }  
          
        //如果包括年份  
        if(isContactYear){  
            /** 
             * 年份  取值范围:1970-2099 
             * 默认值为空 
             * 如果是2010 表示只有2010年触发时间 
             * 如果是2010,2020 表示只有2010 
             */  
            if(StringHandler.isValidStr(year)){  
                cexpress+=year;   
            }  
        }  
          
        return cexpress;  
    }  
  
    public static void main(String [] args){  
        try {  
            /*--------------------创建一个指定时间执行的job-----------------------*/  
            JobDetail jobDetail = new JobDetail("fundsrecord_jobname_folkholdersId1",   
                    "fundsrecord_jobgroupname_folkholdersId1",FundsrecordJob.class);  
            // ①-1:创建CronTrigger,指定组及名称  
            CronTrigger cronTrigger = new CronTrigger("fundsrecord_triggername_folkholdersId1",  
                    "fundsrecord_triggergroupname_folkholdersId1");  
            // ①-2:定义Cron表达式  
            String timeexp = "";  
            String second = "0";  
            String minute = "15";  
            String hour = "0";  
            String day = "L";//当月的最后一天  
            String month = "";  
            String week = "?";  
            month = "6,12";  
            timeexp = getCexpress(second, minute, hour, day, month, week, null, false);  
              
            if(!"0 * * * * ?".equals(timeexp)){//如果没有设置时间则不执行  
                CronExpression cexp = new CronExpression(timeexp);  
                // ①-3:设置Cron表达式  
                cronTrigger.setCronExpression(cexp);  
                Scheduler scheduler = sf.getScheduler();  
                scheduler.scheduleJob(jobDetail, cronTrigger);  
                scheduler.start();  
            }  
              
              
            /*--------------------创建一个间隔一定时间执行的job-----------------------*/  
            String jobName = "fundsrecord_jobname_folkholdersId2";  
            String jobGroupName = "fundsrecord_jobgroupname_folkholdersId2";  
            String triggerName = "fundsrecord_triggername_folkholdersId2";  
            String triggerGroupName = "fundsrecord_triggergroupname_folkholdersId2";  
            Date beginTime = new Date(System.currentTimeMillis() + 60000L);//当前时间过60秒钟后开始  
            Integer repeatInterval = 5000;//以毫秒为单位  
            Integer repeatCount = 0;  
            HashMap<String, Object> map = new HashMap<String,Object>();  
            map.put("folkholdersId", "2");  
            try {  
                CronTriggerRunner.addJob(jobName,jobGroupName,triggerName,  
                        triggerGroupName,beginTime,repeatInterval,  
                        repeatCount,new FundsrecordJob(),map);  
            } catch (SchedulerException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
       } catch (Exception e) {  
           e.printStackTrace();  
       }  
    }  
      
      
}  

 

package com.lec.util.job;  
  
import java.util.HashMap;  
  
import org.quartz.InterruptableJob;  
import org.quartz.JobDataMap;  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.quartz.SchedulerException;  
import org.quartz.UnableToInterruptJobException;  
  
/** 
 * 任务调度器 
 * @author lcy 
 *  May 24, 2011 
 */  
public class FundsrecordJob implements InterruptableJob {  
  
    @Override  
    public void execute(JobExecutionContext context) throws JobExecutionException {  
        JobDataMap map = context.getMergedJobDataMap();  
        Object obj = map.get("params");  
        if(obj != null ){  
            HashMap<String,Object> params = (HashMap<String,Object>)obj;  
            dojob();//在这个任务调度器里面需要执行的方法  
            Long folkholdersId = Long.parseLong((String)params.get("folkholdersId"));  
            try {  
                CronTriggerRunner.stopJob("fundsrecord_jobname_folkholdersId"+folkholdersId,  
                        "fundsrecord_jobgroupname_folkholdersId"+folkholdersId);//停止本次job  
            } catch (SchedulerException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
              
        }  
    }  
    public void interrupt() throws UnableToInterruptJobException {  
          
    }  
  
}  
 
分享到:
评论

相关推荐

    quartz 定时任务调度

    Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架集成,实现灵活的定时任务调度。 在 Spring 中集成 Quartz,首先需要创建一个 Java 类作为定时任务的执行体,例如 `MyJob` 类。这个类通常包含一个...

    Quartz.Net任务调度

    Quartz.Net是一个强大的任务调度框架,它在.NET环境中被广泛应用,尤其在需要执行定时任务的系统中。Quartz.Net的设计灵感来源于Java的Quartz库,它允许开发者灵活地定义和管理作业(Jobs)以及触发器(Triggers),...

    Spring+Quartz实现任务调度的小例子

    Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...

    quartzDemo任务调度例子

    Quartz是Java领域一款强大的开源任务调度框架,它允许开发者定义和执行复杂的任务调度策略。在"quartzDemo任务调度例子"中,我们将探讨如何利用Quartz实现Java应用程序中的定时任务。 1. **Quartz简介** Quartz是...

    quartz1.5.0 任务调度demo

    Quartz是Java领域的一款强大的开源任务调度框架,广泛应用于企业级应用系统中,用于执行定时或周期性的任务。在这个"quartz1.5.0 任务调度demo"中,我们将会探讨如何使用Quartz实现任务的增删改功能,以及其三大核心...

    spring任务调度(Quartz )

    Spring中的任务调度是实现应用程序自动化运行任务的重要工具,而Quartz是Java领域广泛使用的开源任务调度框架。在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作...

    Quartz任务调度器

    Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...

    Java使用quartz实现任务调度定时任务

    本篇文章将深入探讨如何使用Quartz在Java应用程序中实现任务调度。 Quartz库提供了一个灵活的API,可以创建、调度和管理任务,这些任务被称为Job。每个Job都与一个Trigger关联,Trigger定义了何时启动Job。在Java...

    quartz任务调度框架简单实用小demo

    本“quartz任务调度框架简单实用小demo”旨在帮助开发者快速理解和应用Quartz。 1. **Quartz基本概念** - **Job**: 任务的基本单元,代表一个需要执行的工作。 - **Trigger**: 触发器,决定Job何时被执行。 - **...

    任务调度系统基于Quartz.net

    Quartz.NET是一个开源的任务调度框架,它允许开发者在.NET环境中创建、安排和执行各种类型的任务。这个系统的主要目的是实现应用程序的后台任务自动化,比如定期数据备份、清理过期记录、发送邮件等。在"任务调度...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,用于按预定的时间间隔执行特定的任务,例如数据同步、报表生成、清理过期数据等。本项目名为“schedule-...

    C#基于Quartz任务调度系统

    **C#基于Quartz任务调度系统** 在软件开发中,任务调度是一项重要的功能,它允许开发者安排任务在特定时间执行,比如数据同步、定时备份、报告生成等。Quartz是一款强大的开源任务调度库,广泛应用于Java和.NET生态...

    Java中使用Quartz实现任务自动调度的经典例子!

    Quartz是Java中一个强大的开源任务调度库,它允许开发者定义和执行短时或周期性的任务。这个经典例子展示了如何在Java项目中集成并使用Quartz进行任务自动调度。通过以下内容,我们将深入理解Quartz的基本概念、配置...

    Quartz任务调度管理

    ### Quartz任务调度管理 #### 一、任务调度基础概念 任务调度是指系统按照预先设定的时间规则来自动执行特定任务的功能。这种机制广泛应用于各种场景,例如数据备份、定期检查资源状态、发送邮件通知等。 ##### ...

    ASP.NET使用Quartz.NET实现定时任务调度

    与Quartz.NET结合使用,我们可以轻松地将定时任务调度服务包装为一个Windows服务,这样即使在没有用户登录的情况下,也可以持续运行我们的任务调度。 在"基于quartz.net+TopShelf的任务调度源码"中,开发者可能已经...

    SpringBoot整合Quartz任务定时调度

    为了使`QuartzConfig`类在Spring Boot启动时自动执行初始化方法,我们需要在`@Configuration`注解的类上添加`@EnableScheduling`,这将开启Spring的定时任务调度功能: ```java @Configuration @EnableScheduling ...

    quartz动态定时调度完整代码

    在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务调度。这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态任务调度的示例代码和相关资源。 在Quartz中,核心概念包括Scheduler(调度...

Global site tag (gtag.js) - Google Analytics