如何用ofbiz写一个定时任务

 我来答
lilipat
高粉答主

2017-05-09 · 每个回答都超有意思的
知道大有可为答主
回答量:3万
采纳率:94%
帮助的人:5051万
展开全部
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 无限 , 知到执行成功为止

----------------------------
Ofbiz 定时任务配置规则

<!-- TemporalExpression field details... -->

<!-- The TemporalExpression field meanings depend upon what type of expression it is. The integer
values are typically obtained from the java.util.Calendar field constants. For more
information, see the org.ofbiz.service.calendar.TemporalExpressions.java file.

tempExprTypeId integer1 integer2 date1 date2 string1 string2
==================== ============== =============== ====== ====== ========== ========
HOUR_RANGE start[8] end[8]
DATE_RANGE start end
DAY_OF_WEEK_RANGE start [1] end [1]
MINUTE_RANGE start [9] end [9]
MONTH_RANGE start [2] end [2]
DAY_OF_MONTH_RANGE start [3] end [3]
DAY_IN_MONTH day [1] occurrence [4]
FREQUENCY freq type [5] freq count [6] start[7]

[1] Day of week: 1 = Sunday, 7 = Saturday
[2] Month: January = 0, Undecimber = 12
[3] Day of month: 1 to 31
[4] Integer: -5 to +5, zero excluded
[5] Second = 13, Minute = 12, Hour = 11, Day = 5, Month = 2, Year = 1
[6] Positive integer, zero excluded
[7] If null, defaults to system date when the expression was retrieved from storage.
[8] Integer: 0 to 23, midnight = 0
[9] Integer: 0 to 59
-->
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式