服务任务

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"/>

results matching ""

    No results matching ""