Quartz定时调度

来源:互联网 发布:ssd优化 编辑:程序博客网 时间:2024/05/21 21:48

挺郁闷的说 上午还说要用定时器执行呢,下午就告诉我不做了 既然写了 就记录一下吧!!!!


1.什么是quartz?

是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法:

public void execute(JobExecutionContext context) throws JobExecutionException;

在Job接口实现类里面,添加需要的逻辑到execute()方法中。配置好Job实现类并设定好调度时间表,Quartz就会自动在设定的时间调度作业执行execute()。
 
整合了Quartz的应用程序可以重用不同事件的作业,还可以为一个事件组合多个作业。Quartz通过属性文件来配置JDBC事务的数据源、全局作业、触发器侦听器、插件、线程池等等。
 
Quartz是由James House创建并最初于2001年春天被加入sourceforge工程。接下来的几年里,有很多的新特性和版本出现,但是直到项目迁移到新的站点并成为OpenSymphony项目家族的一员,才开始真正启动并受到也有的关注。
 
目前的版本已经是2.0以上,v2.x相对于v1.x有很多新特性出现,并有很多的改动,具体参见Quartz官网上说明。这里介绍的仍然是v1.x(v1.8.6)。
写一个定时调度的任务
package cn.carenet.test;//测试工作类//TestJob.javaimport java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TestJob implements Job {    SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date d = new Date();    String returnstr = DateFormat.format(d);      public void execute(JobExecutionContext arg0) throws JobExecutionException {        System.out.println(returnstr+"★★★★★★★★★★★");    }}package cn.carenet.test;//简单的任务管理类//QuartzManager.javaimport java.text.ParseException;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.Trigger;import org.quartz.impl.StdSchedulerFactory;/** *//** * @Title:Quartz管理类 *  * @Description: *  * @Copyright:  * @author   * @version   * */public class QuartzManager {   private static SchedulerFactory sf = new StdSchedulerFactory();   private static String JOB_GROUP_NAME = "group1";   private static String TRIGGER_GROUP_NAME = "trigger1";        /** *//**    *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名    * @param jobName 任务名    * @param job     任务    * @param time    时间设置,参考quartz说明文档    * @throws SchedulerException    * @throws ParseException    */   public static void addJob(String jobName,Job job,String time)                                throws SchedulerException, ParseException{       Scheduler sched = sf.getScheduler();       JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类       //触发器       CronTrigger  trigger =             new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组       trigger.setCronExpression(time);//触发器时间设定       sched.scheduleJob(jobDetail,trigger);       //启动       if(!sched.isShutdown())          sched.start();   }      /** *//**    * 添加一个定时任务    * @param jobName 任务名    * @param jobGroupName 任务组名    * @param triggerName  触发器名    * @param triggerGroupName 触发器组名    * @param job     任务    * @param time    时间设置,参考quartz说明文档    * @throws SchedulerException    * @throws ParseException    */   public static void addJob(String jobName,String jobGroupName,                             String triggerName,String triggerGroupName,                             Job job,String time)                                throws SchedulerException, ParseException{       Scheduler sched = sf.getScheduler();       JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类       //触发器       CronTrigger  trigger =             new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组       trigger.setCronExpression(time);//触发器时间设定       sched.scheduleJob(jobDetail,trigger);       if(!sched.isShutdown())          sched.start();   }      /** *//**    * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)    * @param jobName    * @param time    * @throws SchedulerException    * @throws ParseException    */   public static void modifyJobTime(String jobName,String time)                                   throws SchedulerException, ParseException{       Scheduler sched = sf.getScheduler();       Trigger trigger =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME);       if(trigger != null){           CronTrigger  ct = (CronTrigger)trigger;           ct.setCronExpression(time);           sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);       }   }      /** *//**    * 修改一个任务的触发时间    * @param triggerName    * @param triggerGroupName    * @param time    * @throws SchedulerException    * @throws ParseException    */   public static void modifyJobTime(String triggerName,String triggerGroupName,                                    String time)                                   throws SchedulerException, ParseException{       Scheduler sched = sf.getScheduler();       Trigger trigger =  sched.getTrigger(triggerName,triggerGroupName);       if(trigger != null){           CronTrigger  ct = (CronTrigger)trigger;           //修改时间           ct.setCronExpression(time);           //重启触发器           sched.resumeTrigger(triggerName,triggerGroupName);       }   }      /** *//**    * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)    * @param jobName    * @throws SchedulerException    */   public static void removeJob(String jobName)                                throws SchedulerException{       Scheduler sched = sf.getScheduler();       sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器       sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器       sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务   }      /** *//**    * 移除一个任务    * @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);//删除任务   }}package cn.carenet.test;import java.text.SimpleDateFormat;import java.util.Date;public class QuartzTest {////Cron表达式举例:// //"30 * * * * ?" 每半分钟触发任务//"30 10 * * * ?" 每小时的10分30秒触发任务//"30 10 1 * * ?" 每天1点10分30秒触发任务//"30 10 1 20 * ?" 每月20号1点10分30秒触发任务//"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务//"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务//"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务//"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务//"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务//"15-45 * * * * ?" 15到45秒内,每秒都触发任务//"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次//"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次//"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次//"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务//"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务//"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务//"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务//"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务    /** *//**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        SimpleDateFormat DateFormat = new SimpleDateFormat("yyyyMMddHHmmss");        Date d = new Date();        String returnstr = DateFormat.format(d);                TestJob job = new TestJob();        String job_name ="11";        try {            System.out.println(returnstr+ "【系统启动】");            QuartzManager.addJob(job_name,job,"30 15 * * * ?"); //每小时15分30秒钟执行一次            //            Thread.sleep(10000);//            System.out.println("【修改时间】");//            QuartzManager.modifyJobTime(job_name,"0/20 * * * * ?");//            Thread.sleep(20000);//            System.out.println("【移除定时】");//            QuartzManager.removeJob(job_name);//            Thread.sleep(10000);//            //            System.out.println("/n【添加定时任务】");//            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");                    }  catch (Exception e) {            e.printStackTrace();        }    }}

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小腿肚子聚筋了怎么办 6个月婴儿腿弯怎么办 胳膊抻筋拉伤了怎么办 宝宝抻着了怎么办妙招 拎东西胳膊抻了怎么办 小臂一用力筋疼怎么办 摔破胳膊很痛怎么办 胳膊的筋扭伤了怎么办 小孩胳膊抻筋了怎么办 肩膀抻着了怎么办妙招 右边肩膀抻着了怎么办 胳膊因劳累很痛怎么办 宝宝胳膊摔了疼怎么办 宝宝胳膊抻筋了怎么办 孕妇胳膊筋伤了怎么办 刚进公司就怀孕怎么办 撞到胳膊麻筋了怎么办 腰抻了怎么办多久能好 腰突然抻了一下怎么办 干活抻筋了 很疼怎么办 胳膊抻筋一动就疼怎么办 肩膀受风了很疼怎么办 开空调受风了怎么办 胳膊受风了疼怎么办 孩子胳膊抻筋了怎么办 胳膊被风吹了疼怎么办 月子里胳膊受风怎么办 受风了胳膊酸痛怎么办 胳膊受风了在家怎么办 手臂烧伤手肿了怎么办 胳膊里的筋疼怎么办 3岁胳膊背筋了怎么办 左胳膊筋一直疼怎么办 手臂突然筋扭了怎么办 胳膊扭了肿了怎么办 胖人走路磨大腿怎么办 脖子上长了个淋巴结怎么办 面部危险三角区长痘痘怎么办 儿童脖子上有淋巴结节怎么办 左侧颈根部淋巴结肿大怎么办 人的三角区肿了怎么办