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
- Spring Quartz定时调度
- Quartz 定时任务调度
- Quartz定时调度初试
- **Quartz定时调度**
- quartz定时任务调度
- Quartz定时调度框架
- Quartz定时调度
- quartz定时调度
- Quartz定时调度
- Quartz定时调度器
- Quartz定时任务调度
- 用 quartz 调度定时工作
- 用quartz调度定时工作
- quartz定时任务调度学习
- spring 定时服务调度quartz
- quartz实现定时任务调度
- Spring+Quartz定时任务调度
- quartz的定时调度任务
- angular--$watch监视用法
- org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: u near line 1, column 55 [fro
- angular入门
- Redis系列(三)——主从介绍和配置
- 有关虚函数的注意事项浅谈
- Quartz定时调度
- pthread编程基础
- 剑指offer-16.合并两个排序的链表
- HDU-4370 0 or 1(SPFA)
- 编写脚本creat_swap.sh
- 【taotao】HttpClient
- UVA1354 (枚举二叉树)
- SourceTree和Github的一些知识
- 素数筛法