1 / 18

20.6 实现任务的自动调度 (quartz)

20.6 实现任务的自动调度 (quartz). JSP 视频教学课程. Quartz 介绍. Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目 , 它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 Quartz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复杂的日程序表。 Jobs 可以做成标准的 Java 组件或 EJBs 。 Quartz 是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。

micah-ross
Download Presentation

20.6 实现任务的自动调度 (quartz)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 20.6 实现任务的自动调度(quartz) JSP 视频教学课程

  2. Quartz 介绍 • Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。 • Quartz是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。 • Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。 • 基本结构 • 任务调度器Scheduler • 作业Job • 触发器Trigger • 任务分配 • 任务控制 • 任务存储

  3. Quartz 介绍 • 任务调度器Scheduler • 是Quartz框架的核心,管理 Scheduler,管理 Job,Trigger 和 Calendar • 基本用法 • 使用配置文件初始化工厂 • new StdSchedulerFactory("quartz.properties"); • 或factory.initialize("quartz.properties"); • 启动任务调度器 • SchedulerFactory factory = new StdSchedulerFactory("quartz.properties"); • Scheduler scheduler = factory.getScheduler(); • scheduler.start(); • 暂停任务调度器 • scheduler.standBy(); • 关闭任务调度器 • scheduler.shutdown();或scheduler.shutdown(true);

  4. Quartz 介绍 • 作业Job • 一个 Quartz Job 就是一个需要执行一个任务的 Java 类 • 编写一个任务需要实现org.quartz.Job接口 • public class myJob implements Job { • public void execute(JobExecutionContext context) • throws JobExecutionException { • // 方法体 • } • } • 当scheduler调用该任务时,就执行execute()方法 • 可以通过JobDataMap向Job传递数据

  5. Quartz 介绍 • 触发器Trigger • 触发器决定何时去执行一个Job • Quartz中有三种Trigger • SimpleTrigger 简单的触发器,可以实现基本的定时触发功能,如以固定的时间间隔执行n次Job • CronTrigger 使用克隆表达式来设定任务触发的时间,如 “0 0/5 8 ? * 1,2 *” 格式为 “秒 分 时 日 月 周 年” • NthIncludedDayTrigger 用于设定某一间隔类型的第几天执行任务,如 NthIncludedDayTrigger trigger = new NthIncludedDayTrigger( "MyTrigger", Scheduler.DEFAULT_GROUP); trigger.setIntervalType( NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY); trigger.setN(15);

  6. Quartz 介绍 • 任务分配 • 实例化JobDetail,Job不直接注册到scheduler,而是通过JobDetail • JobDetail jobDetail = new JobDetail(jobName, Scheduler.DEFAULT_GROUP,jobClass); • Job名称和组名称唯一地决定一个任务,不能重复 • 可以通过JobDataMap向Job类传递数据 • 实例化触发器Trigger • Trigger trigger = new CronTrigger(triggerName,Scheduler.DEFAULT_GROUP, cronExp); • Trigger名称和组名称唯一地决定一个触发器,不能重复 • JobDetail和Trigger组成一个计划任务,注册到scheduler • scheduler.schedule(jobDetail,trigger); • 一个JobDetail能够支持多个Trigger,但一个Trigger只能被指派给一个Job

  7. Quartz 介绍 • 任务控制 • 移除任务,scheduler.deleteJob(jobName, groupName); • 暂停任务,scheduler.pauseJob(jobName, groupName); • 暂停trigger,scheduler.pauseTrigger(triggerName, groupName); • 恢复任务,scheduler.resumeJob(jobName, groupName); • 恢复trigger,scheduler.resumeTrigger(triggerName, groupName); • 重新分配trigger, scheduler.rescheduleJob(triggerName, groupName, newTrigger)

  8. Quartz 介绍 • 任务存储JobStore • Quartz 用 JobStores 对 Job、Trigger、calendar 和 Schduler 数据提供一种存储机制。 • Quartz中提供两种Job存储机制 • 内存(非持久化)存储 • 优点: • 配置简单 • 速度快 • 缺点: • 程序停止后,所有信息都无法恢复 • 持久化存储 • 程序再重启后能不能恢复任务,取决于所采用的JobStore类型

  9. Quartz 介绍 • Quartz配置 • Quartz配置文件quartz.properties主要分为以下几部分 • Main Scheduler Properties • ThreadPool 线程池 • JobStore 任务存储 • DataSources 数据源 • Plugins 插件

  10. Quartz 介绍 • Main Scheduler Properties 配置 • org.quartz.scheduler.instanceName = TestScheduler • org.quartz.scheduler.instanceId = AUTO • 说明 • instanceName用于区分多个scheduler实例 • instanceId必须是所有scheduler实例中唯一的,设为AUTO,则为quartz生成 • 集群环境下生成为主机名加上当前的日期和时间 • 非集群环境下生成为NON_CLUSTERED

  11. Quartz 介绍 • ThreadPool线程池配置 • org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool • org.quartz.threadPool.threadCount = 5 • org.quartz.threadPool.threadPriority = 5 • 说明: • threadCount为线程池大小 • threadPriority为线程优先级

  12. Quartz 介绍 • JobStore任务存储设置 • org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX • 配置使用的JobStore的类型 • org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate • 配置使用的数据库代理 • org.quartz.jobStore.misfireThreshold = 60000 • 错过触发时间后,是否还会执行任务的阈值,错过时间超过此值则不执行 • org.quartz.jobStore.tablePrefix = QRTZ_ • 所使用的数据库表前缀 • org.quartz.jobStore.dataSource = myDS • 数据源名称,与后面的数据源配置对应

  13. Quartz 介绍 • DataSources数据源配置 • org.quartz.dataSource.myDS.driver = net.sourceforge.jtds.jdbc.Driver • 数据库jdbc驱动 • org.quartz.dataSource.myDS.URL = jdbc:jtds:sqlserver://192.168.1.109:1433;databasename=quartz • 连接数据库url • org.quartz.dataSource.myDS.user = sa • 数据库用户名 • org.quartz.dataSource.myDS.password = sa • 数据库密码 • org.quartz.dataSource.myDS.maxConnections = 5 • 数据库最大连接数

  14. SPRING与QUARTZ集成 • Spring提供了对QUARTZ的支持。使用者需要做的就是提供QUARTZ运行时所需要的作业及触发器的相关信息。下面看一段配置: <beans> <!-- 要调用的工作类 --> <bean id="quartzJob" class="com.kay.quartz.QuartzJob"></bean> <!-- 定义调用对象和调用对象的方法 --> <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 调用的类 --> <property name="targetObject"> <ref bean="quartzJob"/> </property>

  15. SPRING与QUARTZ集成 <!-- 调用类中的方法 --> <property name="targetMethod"> <value>work</value> </property> </bean> <!-- 定义触发时间 --> <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="jobtask"/> </property> <!-- cron表达式 --> <property name="cronExpression"> <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value> </property> </bean>

  16. SPRING与QUARTZ集成 • 在这段配置里面定义了作业和触发器,这也是和业务相关的信息。 <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 --> <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="doTime"/> </list> </property> </bean> </beans>

  17. "0 0 12 * * ?" 每天中午十二点触发   • "0 15 10 ? * *" 每天早上10:15触发   • "0 15 10 * * ?" 每天早上10:15触发   • "0 15 10 * * ? *" 每天早上10:15触发   • "0 15 10 * * ? 2005" 2005年的每天早上10:15触发   • "0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发   • "0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发   • "0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发   • "0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发   • "0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发   • "0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发   • "0 15 10 15 * ?" 每月15号的10:15触发   • "0 15 10 L * ?" 每月的最后一天的10:15触发   • "0 15 10 ? * 6L" 每月最后一个周五的10:15触发   • "0 15 10 ? * 6L" 每月最后一个周五的10:15触发   • "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月最后一个周五的10:15触发   • "0 15 10 ? * 6#3" 每月的第三个周五的10:15触发

  18. 谢谢收看! JSP 视频教学课程

More Related