Quartz基本使用
2018-06-18 03:26:17来源:未知 阅读 ()
1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样。在了解它之前,首先熟悉几个概念。
2.基本概念
2.1 Job:表示一个工作,要执行的具体内容。此接口中只有一个方法 void execute(JobExecutionContext context)
2.2 JobDetail:JobDetail 表示一个具体的可执行的调度程序, Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
2.3 Trigger 代表一个调度参数的配置,什么时候去调。
2.4 Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
解释:
l 编写 job 实现业务,要做什么具体事情问题。
l 使用 JobDetail 包装 job,是任务对象,可以被调度
l 使用 Trigger (触发器对象)定制什么时候去调用某任务对象。
l 使用 Scheduler 结合任务对象和触发器对象,很像一个大管家。
3.运行原理
下面实例:开启大管家,启动,关闭
引入相应的jar包
<dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.3</version> </dependency> <!-- slf4j log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
执行:
package com.quartz.test; import org.junit.Test; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; public class QuartzTest { @Test public void TestQuartz() throws Exception{ // 开启大管家(容器) Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 启动 scheduler.start(); // 关闭 scheduler.shutdown(); } }
3.案例:简单任务
步骤:首先建立大管家,启动,分别创建任务详情(执行的内容)和触发器(调度的策略),建立job任务(执行的主体)
任务主体:
package com.quartz.domain; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("hello,quartz!"); } }
package com.quartz.test; import org.junit.Test; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.quartz.domain.HelloJob; public class QuartzTest2 { @Test public void TestQuartz2() throws Exception{ // 获取大管家 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 开启大管家 scheduler.start(); // 定义任务详情对象,参数:具体的job任务调度对象 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) // 参数1:任务对象的名字 参数2:任务的组 .withIdentity("job1", "group1") .build(); //定义触发器 调度的方式 什么时候 什么频率执行job Trigger trigger = TriggerBuilder.newTrigger() //规则的名字和规则要关联的组 参数1:触发器的名字 参数2:组的名字(放到job的组中) .withIdentity("trigger1", "group1") //程序启动后立即开始执行job任务(立即执行) .startNow() //使用什么样的定时对象(调度策略) .withSchedule( //简单的定时任务触发对象 SimpleScheduleBuilder.simpleSchedule() //每隔多少秒执行一次 .withIntervalInSeconds(3) //总共要执行多少次,这里是永远执行下去,没有限制(重复执行) .repeatForever() ) .build(); // 触发器和任务详情交给大管家 scheduler.scheduleJob(jobDetail, trigger); // 不让junit终止jvm while(true){ } } }
测试结果:每个3秒执行一次
4.复杂任务:与简单任务相比,就是策略不同
复杂任务:CronScheduleBuilder.cronSchedule("0/5 * * * * ?") 简单任务: SimpleScheduleBuilder.simpleSchedule()
package com.quartz.test; import org.junit.Test; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.calendar.CronCalendar; import com.quartz.domain.HelloJob; /** * 复杂任务 * @author Administrator * */ public class QuartzTest2 { @Test public void TestQuartz2() throws Exception{ // 获取大管家 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 开启大管家 scheduler.start(); // 定义任务详情对象,参数:具体的job任务调度对象 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) // 参数1:任务对象的名字 参数2:任务的组 .withIdentity("job1", "group1") .build(); //定义触发器 调度的方式 什么时候 什么频率执行job Trigger trigger = TriggerBuilder.newTrigger() // 规则的名字和规则要关联的组 参数1:触发器的名字 参数2:组的名字(放到job的组中) .withIdentity("trigger1", "group1") // 程序启动后立即开始执行job任务(立即执行) .startNow() // 使用什么样的定时对象(调度策略) .withSchedule( //复杂的定时任务触发对象(给定时间来执行任务) 参数:为属性表达式指定时间执行内容 // 每周日的12点11分中的每隔5秒运行一次 // CronScheduleBuilder.cronSchedule("0/5 11 12 ? * 1") // 每5秒执行 CronScheduleBuilder.cronSchedule("0/5 * * * * ?") ) .build(); // 触发器和任务详情交给大管家 scheduler.scheduleJob(jobDetail, trigger); // 不让junit终止jvm while(true){ } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:2.4线程组创建
- 聊聊 OAuth 2.0 的 token expire_in 使用 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- java基本数据类型 2020-06-06
- 学习笔记之方法引用 2020-06-06
- java实现分页查询 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash