服务任务
Moqui使用 moqui.service.job.ServiceJob 和 moqui.service.job.ServiceJobParameter 实体来提供对即时(明确地被执行)或计划任务的配置支持。ServiceCallJob接口被用于被配置的服务任务即时(明确)地运行。用户能使用moqui.service.job.ServiceJobRun 记录来跟踪任务的执行。
你应该知道的 moqui.service.job.ServiceJob 实体的一些重要的字段:
- jobName: 用来存储独一无二的的任务名
- serviceName: 用来存储你想在服务任务运行时调用的服务名(像${path}.${verb}${noun})
- topic: 用来存储一个通知的值,此通知将被发送到用 moqui.service.job.ServiceJobUser* 记录配置的当前用户和所有用户
cronExpression: 用来配置 CronTrigger 的实例,它是 org.quartz.Trigger 的子类。一个 cron 表达式是一个由6或7个描述计划的个别详情的子表达式(字段)组成的字符串。关于cron表达式的更多细节请查看文档:
moqui.service.job.ServiceJobParameter 实体存储当服务任务运行时传到服务的参数名、值对。
ServiceCallJob 接口的方法:
- parameter(String name, Object value):放入parameters传递到服务的单个名、值对
- parameters(Map
context): 组成context(入参)传递到服务的名、值对的Map - run(): 运行一个服务任务
- 服务任务总将异步运行
- 如果 ServiceJob.topic 字段有通知值,将被发送到当前用户和用 moqui.service.job.ServiceJobUser 记录配置的所有用户。NotificationMessage.message 字段将是服务调用的结果
- 它返回 对应的 moqui.service.job.ServiceJobRun 记录的 jobRunId
例如:
ec.service.job("ImportEntityDataSnapshot").parameters(context).run()
ImportEntityDataSnapshot 任务被用来导入实体数据快照。这里job(String jobName)方法被用来获取一个服务调用者来调用一个服务任务。对应这个 jobName 必须有一条 moqui.service.job.ServiceJob 记录。
在 System => Server Admin => Service Jobs 页面有服务任务的列表。
来自Moqui默认自带的 MoquiInstallData.xml 文件的一个计划任务的一些例子:
- clean_ArtifactData_daily 任务每天凌晨2:00清理构件数据:ArtifactHit、ArtifactHitBin
<moqui.service.job.ServiceJob jobName="clean_ArtifactData_daily" description="Clean Artifact Data: ArtifactHit, ArtifactHitBin" serviceName="org.moqui.impl.ServerServices.clean#ArtifactData" cronExpression="0 0 2 * * ?" paused="N">
<parameters parameterName="daysToKeep" parameterValue="90"/>
</moqui.service.job.ServiceJob>
- clean_ServiceJobRun_daily 任务每天凌晨 2:00 清理 ServiceJobRun 数据
<moqui.service.job.ServiceJob jobName="clean_ServiceJobRun_daily" description="Clean ServiceJobRun Data" serviceName="org.moqui.impl.ServiceServices.clean#ServiceJobRun"
cronExpression="0 0 2 * * ?" paused="N">
<parameters parameterName="daysToKeep" parameterValue="30"/>
</moqui.service.job.ServiceJob>
- send_AllProducedSystemMessages_frequent 任务每15分钟发送所有产生的消息
<moqui.service.job.ServiceJob jobName="send_AllProducedSystemMessages_frequent" description="Send All Produced SystemMessages" serviceName="org.moqui.impl.SystemMessageServices.send#AllProducedSystemMessages" cronExpression="0 0/15 * * * ?" paused="N"/>