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

Post on 15-Mar-2016

214 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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 任务分配 任务控制 任务存储

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);

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 传递数据

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);

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

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)

JSP 视频教学课程

JSP2.2 Quartz 介绍 任务存储 JobStore

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

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

优点: 配置简单 速度快

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

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

JSP 视频教学课程

JSP2.2 Quartz 介绍 Quartz 配置

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

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

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

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 为线程优先级

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

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

数据库最大连接数

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>

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>

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>

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

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

谢谢收看!谢谢收看!

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

top related