一 产品介绍
Quartz是一个定时器产品,支持cluster,使用非常简单。Quartz是在open source的基础上,在PAFA3架构下做了定制开发。Quartz产品包括两个组件。
组件 程序 功能
Quartz引擎 quartzmanage-engine.jar Quartz核心SDK包。定义任务,执行任务。
Quartz 管理器 quartzmanage.ear 启动、停止任务
特别说明:异步报表包quartzmanage-asynreport.jar是quartzmanage-engine.jar的超集,具有quartz的完整功能。
Quartz依赖的jar包
组件 依赖jar包
Quartz引擎 Pafa3的所有jar包,但commons-collections.jar需要3.1以上版本。
Quartz 管理器 已将pafa3的jar打进ear包,不再依赖其他jar吧。
Quartz依赖数据库,有12张表。 这些表中的数据量不会随时间增长。 这些表可以随时创建。因此Quartz产品还包括三个SQL脚本,用于建表、索引及基表初始化。
Quartz还有一个配置文件context-quartzmanage.properties。
二 Quartz 配置文件说明
下面是Quartz的配置文件的内容。其中红色字体一般要修改。jndi.url、EjbJndiTemplate.username、EjbJndiTemplate.password、txnActionBean.jndi.url是pafa3需要的,um.WebServer是访问um需要的。datasource.jndi定义Qaurtz的数据源。
org.quartz.group.name 定义本系统任务的Quartz组,由于一个系列使用同一套Quartz数据库表,因此各系统的org.quartz.group.name一定要不一样。
# quartzmanage的JNDI配置
jndi.url=t3://localhost,127.0.0.1:14001
EjbJndiTemplate.username=weblogic
EjbJndiTemplate.password=weblogic
# TxnActionBean JNDI配置,肯定是localhost ,但端口可能不是缺省的7001
txnActionBean.jndi.url=t3://localhost:14001
#UM登陆引用的链接地址
um.WebServer=http://um-ad-02-int.paic.com.cn
#quatz及异步报表的数据源jndi
datasource.jndi=jdbc/epciscdeDS
#下面是quartz的配置
#Quartz Group Name
org.quartz.group.name=myGroup4
#quartz scheduler实例名
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
#定义每个scheduler节点的ID,使用AUTO保证在集群环境中保证ID的唯一性
org.quartz.scheduler.instanceId = AUTO
#定义是否自动运行scheduler, 设置为true则应用启动时将自动启动quartz,为false则不启动。默认为true.
org.quartz.scheduler.autoStartup = true
#定义job可工作的线程
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
#定义jobStor保存job信息
org.quartz.jobStore.misfireThreshold = 60000
#定义数据表名的前缀
org.quartz.jobStore.tablePrefix =QRTZ_
#定义使用集群
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 15000
#定义日志记录
org.quartz.plugin.jobHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobHistory.jobToBeFiredMessage = Job {0} is about to be fired at: {2, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.jobHistory.jobSuccessMessage = Job {0} completed at: {2, date, HH:mm:ss MM/dd/yyyy}
三 Quartz引擎的开发
1 编写JOB实现逻辑,
package com.paic.pafa.demo.job;
public class SayHelloPojo1 {
public void execute()
{
System.out.println("Hello1!");
}
}
2 将quartzmanage-engine.jar包里的biz-context-quartz.xml文件取出修改,定义job、trigger,并在Scheduler中指定所定义的trigger。
<!--定义job。指定要运行的pojo job 类名及方法名 -->
<bean id="sayHelloPojoJob1" class="com.paic.pafa.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.paic.pafa.scheduling.quartz.PojoJobInvoker</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="className">
<value>com.paic.pafa.demo.job.SayHelloPojo1</value>
</entry>
<entry key="methodName">
<value>execute</value>
</entry>
</map>
</property>
<property name="group">
<value>${org.quartz.group.name}</value>
</property>
</bean>
<!--定义trigger。指定要运行的pojo job 类名及方法名 -->
<bean id="commonTrigger" class="com.paic.pafa.scheduling.quartz.SimpleTriggerBean" lazy-init="true">
<property name="startDelay">
<!-- 指定启动后多长时延后开始调度任务,单位毫秒 -->
<value>20000</value>
</property>
<property name="repeatInterval">
<value>1000</value> <!-- 指定以毫秒为单位的运行频率 -->
</property>
<property name="group">
<value>${org.quartz.group.name}</value>
</property>
</bean>
<bean id="sayHelloPojoTrigger1" parent="commonTrigger">
<property name="jobDetail">
<ref local="sayHelloPojoJob1" /> <!--引用前面的job bean -->
</property>
<property name="group">
<value>${org.quartz.group.name}</value>
</property>
</bean>
<!--定义scheduler-->
<bean id="schedulerFactory" class="com.paic.pafa.scheduling.quartz.SchedulerFactoryBean">
<property name="calendars">
<map>
<entry key="weekendCalendar">
<ref local="weekendCalendar"/>
</entry>
</map>
</property>
<property name="triggers">
<list>
<!—让scheduler调度job -->
<ref local="sayHelloPojoTrigger1" /></list>
</property>
<property name="group">
<value>${org.quartz.group.name}</value>
</property>
<property name="configLocation">
<value>classpath:context-quartzmanage.properties</value>
</property>
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="overwriteExistingJobs">
<value>true</value>
</property>
<property name="dataSource">
<ref local="dsFactory" />
</property>
<property name="applicationContextSchedulerContextKey">
<value>context</value>
</property>
</bean>
将修改后的biz-context-quartz.xml文件重新放回quartzmanage-engine.jar。
3启动Quartz。
在ejb的ejbCreate()方法中,
public void ejbCreate()
{
//启动quartz
com.paic.pafa.scheduling.biz.util.InitContext.getInstance().init(); }
如果系统没有ejb。 可以在一个pojo类的static快中调用com.paic.pafa.scheduling.biz.util.InitContext.getInstance().init();来启动quartz。
特别说明:quartzmanage-asynreport.jar包含一个ejb。在ejbCreate方法里缺省启动了Quartz。可以修改ejb-jar.xml里ejb/InitQuartz为N,不启动Quartz。如下
<!--是否在ebjCreate()方法里InitQuartz。Y/N -->
<env-entry>
<env-entry-name>ejb/InitQuartz</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>N</env-entry-value>
</env-entry>
当定时任务需要调用pafa3 在xml里定义的bean时,需要将biz-context-quartz.xml文件在pafa AC的ejbCreate里初始化。此时,应将ejb/InitQuartz设成N。并在pafa AC的ejb/BeanFactoryPath设置biz-context-quartz.xml,如下。
<env-entry>
<env-entry-name>ejb/BeanFactoryPath</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<!-- 配置biz context文件(必需在CLASSPATH找到),如果有多个biz-context配置文件,用空格、英文逗号或分号分隔 -->
<env-entry-value>biz-context-quartz.xml</env-entry-value>
</env-entry>
4 将quartzmanage-engine.jar打进ear包。
四 Quartz 管理器的修改
修改web.xml及weblogic.xml里安全角色的系统名
将quartzmanage.ear包里的war包的web.xml及weblogic.xml取出。将这两个文件里的“PCIS_GQS”替换为本系统在UM里的名称。然后将修改后的这两个文件放进ear包。
五 Quartz引擎的部署
Quartz引擎随应用系统以前部署,部署在APP服务器上。
1 在数据库里创建数据库表
2 在weblogic console 创建data source.
3 按第二节所讲修改配置文件,并将配置文件放在classpath下。
4 随应用系统部署。
这样Quartz就完全可用了。
六 Quartz 管理器的部署
Quartz 管理器只有web页面,按PAFA3的规范打进了ear包里。由于要访问数据,应部署在ServerFarm区,管理员(应用服务人员)通过terminal 访问。 一个系列(产、个、团等)部署一个非cluster的Quartz 管理器,用于管理本系列所有系统的任务。
1 在UM管理系统里
1.1 在um的业务系统管理部分,增加操作
操作编号: op_quartzadmin
操作名称: quartz管理操作
操作说明: quartz管理操作
操作资源:
*.do
*.screen
操作类型: 普通操作
1.2在um的业务系统管理部分,增加安全角色
角色编号: role_quartzadmin
角色名称: quartz管理员角色
角色说明: quartz管理员角色
是否适合临时工使用: 否
操作列表:
op_quartzadmin(quartz管理操作)
权限范围:
1.3 在um的用户管理部分,为quartz管理员分配安全角色。
2 在weblogic console 上配置UM Authenticator。 这部分参考um文档。
3 创建数据源。
4 修改配置文件context-quartzmanage.properties并放在classpath下。 只需修改红色部分,其他部分Quartz管理器没用到。
# quartzmanage的JNDI配置
jndi.url=t3://localhost,127.0.0.1:14001
EjbJndiTemplate.username=weblogic
EjbJndiTemplate.password=weblogic
# TxnActionBean JNDI配置,肯定是localhost ,但端口可能不是缺省的7001
txnActionBean.jndi.url=t3://localhost:14001
#UM登陆引用的链接地址
um.WebServer=http://um-ad-02-int.paic.com.cn
#quatz及异步报表的数据源jndi
datasource.jndi=jdbc/epciscdeDS
#下面是quartz的配置
#Quartz Group Name
org.quartz.group.name=myGroup4
#quartz scheduler实例名
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
#定义每个scheduler节点的ID,使用AUTO保证在集群环境中保证ID的唯一性
org.quartz.scheduler.instanceId = AUTO
#定义job可工作的线程
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
#定义jobStor保存job信息
org.quartz.jobStore.misfireThreshold = 60000
#定义数据表名的前缀
org.quartz.jobStore.tablePrefix =QRTZ_
#定义使用集群
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 15000
#定义日志记录
org.quartz.plugin.jobHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobHistory.jobToBeFiredMessage = Job {0} is about to be fired at: {2, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.jobHistory.jobSuccessMessage = Job {0} completed at: {2, date, HH:mm:ss MM/dd/yyyy}
5 部署quartzmanage.ear包。
分享到:
相关推荐
### Quartz 开发指南知识点概述 #### 一、Quartz 功能简介 Quartz 是一款开源的任务调度框架,广泛应用于 Java 应用程序中。它的主要功能包括但不限于: 1. **可嵌入性**:Quartz 可以轻松地嵌入到任何独立的应用...
一旦你配置好Job实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的execute()方法并允许做它该做的事情。无需报告任何东西给...
Quartz 开发指南 Quartz 是一个功能强大的任务日程管理系统,它可以与任何其他软件系统集成或者一起使用。Quartz 的主要特点包括: * 能嵌入到任何独立的应用中运行 * 能在应用服务器或者 Servlet 容器中实例化,...
通过阅读《Quartz 开发指南》PDF 和实践 QuartzWeb 示例,你可以深入了解 Quartz 的工作原理和实际运用,提升项目中的任务调度能力。无论是简单定时任务还是复杂的业务流程自动化,Quartz 都能提供强大的支持。
在给定的压缩包文件中,我们有两个重要的资源:一个是"Quartz Job Scheduling Framework 中文版 V1.0.0 (1).chm",另一个是"Quartz开发指南.pdf"。 "Quartz Job Scheduling Framework 中文版 V1.0.0 (1).chm"是...
### Quartz 开发指南知识点梳理 #### 一、Quartz 功能简介 - **特性概述**: - **独立运行**:Quartz 可以嵌入到任何独立的应用中运行。 - **应用服务器集成**:Quartz 可以在应用服务器或者 Servlet 容器中实例...
这个"Quartz开发指南.rar"很可能包含了详细的Quartz使用教程和实践案例,是学习和理解Quartz的好资源,尤其适合高校学生进行作业和任务管理的项目。 1. **Quartz简介**: - Quartz是Apache软件基金会下的一个项目...
在《Quartz开发指南》这本书中,你将深入学习到如何配置和使用Quartz,通过实例了解如何定义作业和触发器,以及如何在实际项目中利用Quartz的高级特性进行任务调度。这本书对于理解Quartz的底层机制和实现高效、可靠...
本资料《Java Quartz 开发指南》是一份PDF文档,旨在帮助开发者理解和使用Quartz进行任务调度。 Quartz的核心概念包括: 1. **作业(Job)**:作业是实际需要执行的任务,它是一个实现了`org.quartz.Job`接口的...
主要有Quartz开发指南、并且有比较清晰明了的例子、jar包,是想用该技术的新手首选
Quartz是一款强大的、开源的Java定时任务框架,用于在应用程序中调度任务。它以其灵活性、稳定性和可扩展性而受到广泛赞誉。以下是Quartz的主要特点和功能的详细说明: 1. **灵活的调度**:Quartz允许开发者创建...
本文目前主要包括如下几个部分: Quartz功能简介:介绍Quartz的特点及概念。 使用Quartz的常见问题:很多用户在使用过程中遇到常见...快速开始:让读者尽快掌握Quartz开发。 :通过一些列的课程来指导如何使用Quartz.