18
20.6 20.6 实实实实实实实实实 实实实实实实实实实 (quartz) (quartz) JSP JSP 实实实实实实 实实实实实实

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

JSP JSP 视频教学课程视频教学课程

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目 , 它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 Quartz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复杂的日程序表。

Jobs 可以做成标准的 Java 组件或 EJBs 。 Quartz 是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。 Quartz 用一个小 Java 库发布文件( .jar 文件),这个库文件包含了所有

Quartz 核心功能。这些功能的主要接口 (API) 是 Scheduler 接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始 / 停止 / 暂停日程进度。 基本结构

任务调度器 Scheduler 作业 Job 触发器 Trigger 任务分配 任务控制 任务存储

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 任务调度器 Scheduler

是 Quartz 框架的核心,管理 Scheduler ,管理 Job , Trigger 和 Calendar

基本用法•使用配置文件初始化工厂使用配置文件初始化工厂new StdSchedulerFactory("quartz.properties");new StdSchedulerFactory("quartz.properties");或或 factory.initializefactory.initialize("quartz.properties");("quartz.properties");

•启动任务调度器启动任务调度器SchedulerFactory factory = new StdSchedulerFactory("quartz.properties");SchedulerFactory factory = new StdSchedulerFactory("quartz.properties");Scheduler scheduler = factory.getScheduler();Scheduler scheduler = factory.getScheduler();scheduler.start();scheduler.start();

•暂停任务调度器暂停任务调度器scheduler.standBy();scheduler.standBy();

•关闭任务调度器关闭任务调度器scheduler.shutdown();scheduler.shutdown(); 或或 scheduler.shutdown(true);scheduler.shutdown(true);

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 作业 Job

一个 Quartz Job 就是一个需要执行一个任务的 Java 类 编写一个任务需要实现 org.quartz.Job 接口

public class myJob implements Job { public void execute(JobExecutionContext context)

throws JobExecutionException { // 方法体 } }

当 scheduler 调用该任务时,就执行 execute() 方法 可以通过 JobDataMap 向 Job 传递数据

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 触发器 Trigger

触发器决定何时去执行一个 Job Quartz 中有三种 Trigger

SimpleTrigger简单的触发器,可以实现基本的定时触发功能,如以固定的时间间隔执行 n 次 Job

CronTrigger使用克隆表达式来设定任务触发的时间,如 “ 0 0/5 8 ? * 1,2 *”格式为 “秒 分 时 日 月 周 年”

NthIncludedDayTrigger用于设定某一间隔类型的第几天执行任务,如

NthIncludedDayTrigger trigger = new NthIncludedDayTrigger( NthIncludedDayTrigger trigger = new NthIncludedDayTrigger( "MyTrigger", Scheduler.DEFAULT_GROUP); "MyTrigger", Scheduler.DEFAULT_GROUP); trigger.setIntervalType( trigger.setIntervalType( NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY); NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY); trigger.setN(15); trigger.setN(15);

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

JSP 视频教学课程

JSP2.2 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

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

JSP 视频教学课程

JSP2.2 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)

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 任务存储 JobStore

Quartz 用 JobStores 对 Job 、 Trigger 、 calendar 和 Schduler 数据提供一种存储机制。

Quartz 中提供两种 Job 存储机制 内存(非持久化)存储

优点: 配置简单 速度快

缺点: 程序停止后,所有信息都无法恢复

持久化存储 程序再重启后能不能恢复任务,取决于所采用的 JobStore 类型

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 Quartz 配置

Quartz 配置文件 quartz.properties 主要分为以下几部分 Main Scheduler Properties

ThreadPool 线程池 JobStore 任务存储 DataSources 数据源 Plugins 插件

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 Main Scheduler Properties 配置

org.quartz.scheduler.instanceName = TestScheduler org.quartz.scheduler.instanceId = AUTO

说明 instanceName 用于区分多个 scheduler 实例 instanceId 必须是所有 scheduler 实例中唯一的,设为

AUTO ,则为 quartz 生成 集群环境下生成为主机名加上当前的日期和时间 非集群环境下生成为 NON_CLUSTERED

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 ThreadPool 线程池配置

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 5

说明: threadCount 为线程池大小 threadPriority 为线程优先级

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

JSP 视频教学课程

JSP2.2 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 数据源名称,与后面的数据源配置对应

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

JSP 视频教学课程

JSP2.2 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

数据库最大连接数

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

JSP 视频教学课程

JSP2.2 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>

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

JSP 视频教学课程

JSP2.2 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>

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

JSP 视频教学课程

JSP2.2 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>

在这段配置里面定义了作业和触发器,这也是和业务相关的信息。

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

JSP 视频教学课程

JSP2.2

"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 触发

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

谢谢收看!谢谢收看!

JSP JSP 视频教学课程视频教学课程