`
godsend_jin
  • 浏览: 40024 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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包。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Quartz开发指南.pdf

    Quartz开发指南.pdf

    Quartz开发指南.docx

    Quartz开发指南

    quartz开发指南

    一旦你配置好Job实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的execute()方法并允许做它该做的事情。无需报告任何东西给...

    Quartz 开发指南(附源码)

    Quartz 开发指南(附源码)Quartz 开发指南(附源码)Quartz 开发指南(附源码)Quartz 开发指南(附源码)

    Quartz 开发指南 中文版

    Quartz 开发指南 中文版 1. 第一课:使用Quartz 2. 第二课:Jobs And Triggers 3. 第三课:更多关于Jobs和JobDetails的内容 4. 第四课:关于Triggers更多的内容 5. 第五课:SimpleTriggers 6. 第六课: CronTriggers 7. ...

    《Quartz开发指南》pdf

    通过代码及实例详细介绍Quartz开发,pdf的,包括基本的Jobs and Triggers ,和集群模式下的事务处理以及其他的高级特性。

    Quartz-JOB-Framework 中文版和QUartz开发指南 .zip

    该资源里面包含了Quartz-JOB-Framework 中文版和QUartz开发指南,而且QUartz开发指南带有书签。

    Quartz开发指南.rar 好东西

    Quartz开发指南.rar 好东西 高校的 作业,任务 管理

    Quartz开发指南、例子、jar包

    主要有Quartz开发指南、并且有比较清晰明了的例子、jar包,是想用该技术的新手首选

    Quartz开发指南-基于1.4.3版本 (1).pdf

    Quartz功能简介 :介绍Quartz的特点及概念。 使用Quartz的常见问题 :很多用户在使用过程中遇到常见问题的解答。 快速开始:让读者尽快掌握Quartz开发。...Quartz官方开发指南:通过一些列的课程来指导如何使用Quartz.

    Quartz开发指南pdf版本

    本文目前主要包括如下几个部分: Quartz功能简介:介绍Quartz的特点及概念。 使用Quartz的常见问题:很多用户在使用过程中遇到常见...快速开始:让读者尽快掌握Quartz开发。 :通过一些列的课程来指导如何使用Quartz.

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

Global site tag (gtag.js) - Google Analytics