Quartz开发指南

一 产品介绍
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包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值