ofbiz中定时任务的用法

1.ofbiz中创建一个定时任务关联到两张表

  TemporalExpression(定义任务执行的时间段)

     JobSandbox(定义任务调用的Service)


tempExprTypeId有如下几种:

DateRange   date级别  Integer1   Integer2    (表示日期之内)  String1 String2 (表示时间段内)  (例如 Integer1=1 Integer2 = 3 String1=20:00:00 String2=20:00:00  表示每月1到3号的晚上8点执行)
DayInMonth
DayOfMonthRange
DayOfWeekRange
Difference
Frequency
Intersection
MonthRange
TimeOfDayRange
Union

 

2.代码实例

entitymodel.xml

 <entity entity-name="TestTable"
            package-name="org.ofbiz.humanres.ability"
            title="Party Qualification Type Entity">
      <field name="testId" type="id-ne"></field>
      <field name="username" type="indicator"></field>
      <field name="password" type="indicator"></field>
      <field name="description" type="description"></field>
      <prim-key field="testId"/>
    </entity>

 

service.xml

 <service name="createTestData" engine="simple" location="org/hotwax/practice/PracticeServices.xml" invoke="createTestData" default-entity-name="TestTable" auth="false">
    </service>

 

simple-method

 

<simple-method method-name="createTestData" short-description="create a Person">   
        <make-value entity-name="TestTable" value-field="newEntity"/>
        <sequenced-id sequence-name="TestTable" field="newEntity.testId"/>
        <set field="newEntity.username" value="Y"/>
        <set field="newEntity.password" value="N"/>
        <create-value value-field="newEntity"/>
    </simple-method>

 

testData.xml

(每分钟执行一次)

 <TemporalExpression tempExprId="MINUTE_0_59" tempExprTypeId="MINUTE_RANGE" integer1="0" integer2="59"/>
    
 <JobSandbox jobId="Test_Job" jobName="Mail Notification Job" runTime="2010-02-25 18:00:00.000" serviceName="createTestData" poolId="pool" runAsUser="system" tempExprId="MINUTE_0_59" maxRecurrenceCount="-1"/>

 (maxRecurrenceCount为执行的次数, -1为无限执行)

ant load-demo重新启动服务即可发现表中每分钟插入一条数据.

 

3.在Java中添加定时任务:

  dispatcher.schedule( jobName, poolName, serviceName, serviceContext, 
           startTime, frequency, interval, count, endTime, maxRetry  );

 

  Dispatcher.schedule()方法参数配置详解:

 

  jobName            :计划任务名称, 唯一标识
  poolName          : job池名称 如果你不清楚这个是干嘛的话 默认pool好了
  serviceName     : job 要调用的服务名称
  serviceContext  :map型参数 ,job调度需要用到的数据 ,会被转化成XML格式保存到runtimeData中 (重复调度的时候会再次用到)
  startTime :  long 格式 执行调度的开始时间
  frequency  :  执行频率 (数据类型有  RecurrenceRule.DAILY(执行频率以天为单位) 、   RecurrenceRule.HOURLY(执行频率以小时为单位)等等)
  interval :   执行间隔 配合frequency 使用 , frequency 为单位 , interval 为数量 ,联合起来其 XX天/次(XX天执行一次) 、XX小时/次(XX小时执行一次)   
  count:    执行次数 。 最大执行次数,当执行次数达到这个值时就不在执行了 。 如果设置-1 即不限次数
  endTime :  执行结束时间,一般用在count 为-1 的时候 使用 ,当限时时间达到这一时间时 即不在执行
  maxRetry :  失败后重复执行次数 , 某次调度执行失败的话 ,重复执行的次数 , -1 无限 , 知到执行成功为止 

 

 

  

posted @ 2015-03-26 16:58  〆﹏汪‖鋭  阅读(736)  评论(0)    收藏  举报