# com.eos.foundation.eoscommon.ScheduleUtil

# 构件包说明

本工具类实现了对定时器的操作。

# 运算逻辑构件使用说明

该构件包包含以下构件:

序号 方法 功能描述
1 add(DataObject scheduleInfo) 添加定时器
2 get(String schedulerName, String taskName) 取得任务详细信息
3 getAllSchedulerName() 取得所有的调度器名称
4 getAllTaskName(String schedulerName) 取得所有的任务名称
5 pause(DataObject scheduleInfo) 暂停
6 remove(DataObject scheduleInfo) 删除定时器
7 resume(DataObject scheduleInfo) 重启
8 update(DataObject scheduleInfo) 更新定时器

# add:添加定时器

# 【功能说明】

向指定应用添加定时任务。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.add,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 scheduleInfo DataObject 任务基本信息。
  • scheudlerName:调度器名称
  • taskName:任务名称
  • taskType:任务类型(SCA业务构件服务任务为1、逻辑流任务为2、任意java方法任务为3)
  • targetQName:目标全名称如果是服务,就是服务全名,比如com.primeton.Simple.ServiceTestComposite.NoparamService/SimpleService;如果是逻辑流,就是逻辑流全名,比如com.primeton.Simple.BizSimComponent;如果是任意方法,就是类全名,比如com.primeton.Simple.SimpleMehod。
  • targetOperation:方法名
  • args:方法参数列表
  • isStateful:是否有状态任务
  • startTime:起始时间
  • endTime:结束时间
  • cronExpression:触发器的复杂表达式字符串
    1. 抛出异常说明 无。

    2. 规则说明 关于Cron表达式,请参考Quartz及Cron-表达式说明 (opens new window)

    # 【参考案例】

    示例:增加一个定时任务。

    • 场景描述 增加一个定时任务处理,晚上定时批量导入数据任务。 假定任务是个java方法任务,java类是com.primeton.test.AAA,方法名是methodA,参数是一个DataObject对象。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 scheduleInfo DataObject scheduleInfo 变量 传引用
    • 参数描述 无。

    • 其他说明

      赋值图元的赋值属性如下图所示:

      img

      参数说明如下:

      || 参数名称 || 参数意义 || ||

    scheudlerName 调度器名称。(可以为空,默认是default调度器)
    taskName 任务名称。(不能为空)
    taskType 任务类型(SCA业务构件服务任务为1、逻辑流任务为2、任意java方法任务为3)。(可以为空,默认是任意任务类型)
    targetQName 目标全名称。(增加任务,不能为空)
    targetOperation 方法名。(增加任务,不能为空)
    args 方法参数列表。(增加任务,不能为空)
    isStateful 是否有状态任务。(可以为空,默认是无状态任务)
    startTime 起始时间。(可以为空,默认是当前时间)
    endTime 结束时间。(可以为空,默认无结束时间)
    cronExpression 触发器的复杂表达式字符串。(增加或更新任务,不能为空)

    说明

    第一次增加定时任务会在数据库创建定时器相关的12张数据库表,详见本地数据库。

    • 调用前的bizContext
    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <scheduleInfo __id="1" __type="sdo:com.eos.foundation.ScheduleInfo">
                <schedulerName __type="java:java.lang.String">default</schedulerName>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskType __type="java:java.lang.Integer">2</taskType>
                <targetQName __type="java:java.lang.String">com.primeton.test.AAA</targetQName>
                <targetOperation __type="java:java.lang.String">methodA</targetOperation>
                <isStateful __type="java:java.lang.Boolean">false</isStateful>
                <cronExpression __type="java:java.lang.String">0 15 10 * * ?</cronExpression>
                <startTime/>
                <endTime/>
                <args __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                    <__entry __index="0" __isNullOrEmpty="null"/>
                </args>
            </scheduleInfo>
        </__root>
    </bizContext>
    
    • 调用后的bizContext 同调用前。

    • 调用这个运算逻辑后,在定时任务系统表中会增加如下记录。

    字段
    字段
    EOS_QRTZ_JOB_DETAILS表
    JOB_NAME task1
    JOB_GROUP eos:group:eos-default
    DESCRIPTION
    JOB_CLASS_NAME com.primeton.common.schedule.impl.TaskExecuteJob
    IS_DURABLE 1
    IS_VOLATILE 0
    IS_STATEFUL 0
    REQUESTS_RECOVERY 0
    JOB_DATA <BLOB>
    EOS_QRTZ_CRON_TRIGGERS表
    TRIGGER_NAME eos:trigger:12125676423590
    TRIGGER_GROUP eos:group:eos-default:task1
    CRON_EXPRESSION 0 15 10 * * ?"
    TIME_ZONE_ID Asia/Shanghai
    EOS_QRTZ_TRIGGERS表
    TRIGGER_NAME eos:trigger:12125717782033
    TRIGGER_GROUP eos:group:eos-default:task1
    JOB_NAME task1
    JOB_GROUP eos:group:eos-default
    IS_VOLATILE 0
    DESCRIPTION
    NEXT_FIRE_TIME 1212632100000

    | PREV_FIRE_TIME | -1 | | TRIGGER_STATE | WAITING | | TRIGGER_TYPE | CRON | | START_TIME | 1212571778000 | | END_TIME | 0 | | CALENDAR_NAME | | | MISFIRE_INSTR | 0 | | JOB_DATA | <BLOB> |

    # get:取得任务详细信息

    # 【功能说明】

    取得任务详细信息。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.get,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    参数 schedulerName String 调度器名称
    参数 taskName String 任务名称
    返回值 out0 Map<String, Object> Unknown macro: {span}任务详细信息。Map<String, Object>内容如下:taskName:任务名称taskType:任务类型(SCA业务构件服务任务为1、逻辑流任务为2、任意java方法任务为3)isStateful:是否有状态任务(是为true、否为false)quartzJobDetail:quartz的详细任务信息taskDetail:任务详细信息对象taskState:任务状态(正常为0、暂停为1、完成结束为2、错误为3)triggerList:List<Map<String, Object>>:触发器详细信息列表triggerType:触发器类型(简单触发器为1、复杂触发器为2、其他触发器为0。有复杂表达式的触发器为复杂触发器)triggerState:触发器状态(正常为0、暂停为1、完成结束为2、错误为3、阻塞为4、无状态为-1)repeatCount:触发次数(如果是简单触发起类型)repeatInterval:触发间隔(如果是简单触发起类型)cronExpression:复杂表达式(如果是复杂触发起类型)startTime:触发开始时间endTime:触发结束时间
    1. 抛出异常说明 无。

    # 【参考案例】

    示例:取得任务详细信息。

    • 场景描述 先用sysadmin帐户登陆EOS-GOVERNOR,在 配置 > 定时器 中给default调度器新增定时任务taskC。 具体新增定时器操作请参见《EOS管理员手册》中的"Governor配置功能\定时器配置\新增定时任务",新增界面如下图: img

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 schedulerName String default 常量 传引用
    参数 taskName Object taskC 常量 传引用
    返回值 out0 Object taskDetailInfo 变量 传引用
    • 参数描述 无。

    • 其他说明 无。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <taskDetailInfo __isNullOrEmpty="null"/>
        </__root>
    </bizContext>
    
    • 调用后的bizContext
    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <taskDetailInfo __id="1" __type="java:java.util.HashMap">
                <isStateful __type="java:java.lang.Boolean">false</isStateful>
                <quartzJobDetail __id="2" __type="java:org.quartz.JobDetail">
                    <description __isNullOrEmpty="null"/>
                    <durable __type="java:boolean">true</durable>
                    <fullName __type="java:java.lang.String">eos:group:eos-default.task1</fullName>
                    <group __type="java:java.lang.String">eos:group:eos-default</group>
                    <jobClass __type="java:java.lang.Class" __unsupported="true">
                       This value not supported be serialized by eos, maybe it has not default constructor!!
                       class:class java.lang.Class  ,
                       toString:class com.primeton.common.schedule.impl.TaskExecuteJob
                    </jobClass>
                    <jobDataMap __id="5" __type="java:org.quartz.JobDataMap">
                        <__task_detail_info __refid="3"/>
                    </jobDataMap>
                    <jobListenerNames __id="6" __isNullOrEmpty="empty" __type="java:[Ljava.lang.String;"/>
                    <name __type="java:java.lang.String">task1</name>
                    <stateful __type="java:boolean">false</stateful>
                    <volatile __type="java:boolean">false</volatile>
                </quartzJobDetail>
                <taskDetail __id="3" __type="java:com.primeton.common.schedule.impl.base.LogicflowTaskDetail">
                    <quartzJobDataMap __id="7" __isNullOrEmpty="empty" __type="java:java.util.LinkedHashMap"/>
                    <stateful __type="java:boolean">false</stateful>
                    <targetArgs __id="8" __isNullOrEmpty="empty" __type="java:[Ljava.lang.String;"/>
                    <targetName __type="java:java.lang.String">
                       com.primeton.eos.foundation.example.ScheduleUtil
                    </targetName>
                    <targetOperation __type="java:java.lang.String">getAllSchedulerName</targetOperation>
                    <taskListeners __id="9" __isNullOrEmpty="empty"
                                            __type="java:[Lcom.primeton.ext.common.schedule.ITaskListener;"/>
                    <taskName __type="java:java.lang.String">task1</taskName>
                </taskDetail>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskState __type="java:java.lang.Integer">0</taskState>
                <taskType __type="java:java.lang.Integer">2</taskType>
                <triggerList __collection="list" __collectionid="4" __id="10" __index="0"
                                                                    __type="java:java.util.HashMap">
                    <endTime __type="java:java.util.Date">2009-04-30 16:07:46</endTime>
                    <repeatCount __type="java:java.lang.Integer">1</repeatCount>
                    <repeatInterval __type="java:java.lang.Long">20000000</repeatInterval>
                    <startTime __type="java:java.util.Date">2009-04-21 16:07:39</startTime>
                    <triggerState __type="java:java.lang.Integer">0</triggerState>
                    <triggerType __type="java:java.lang.Integer">1</triggerType>
                </triggerList>
            </taskDetailInfo>
        </__root>
    </bizContext>
    

    # getAllSchedulerName:取得所有的调度器名称

    # 【功能说明】

    取得所有的调度器名称列表。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.getAllSchedulerName,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    返回值 out0 String[] 所有的调度器名称列表
    1. 抛出异常说明 无。

    # 【参考案例】

    示例:取得所有的调度器名称。

    • 场景描述 无。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    返回值 out0 String[] schedulerNames 变量 传引用
    • 参数描述 无。

    • 其他说明 无。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <schedulerNames __id="1" __isNullOrEmpty="empty" __type="java:[Ljava.lang.String;"/>
        </__root>
    </bizContext>
    
    • 调用后的bizContext
    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <schedulerNames __id="1" __type="java:[Ljava.lang.String;">
                <__entry __index="0" __type="java:java.lang.String">default</__entry>
            </schedulerNames>
        </__root>
    </bizContext>
    

    # getAllTaskName:取得所有的任务名称

    # 【功能说明】

    取得指定调度器的所有任务名称列表。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.getAllTaskName,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    参数 schedulerName String 调度器名称
    返回值 out0 String[] 当前任务列表中所有的任务名列表
    1. 抛出异常说明 无。

    # 【参考案例】

    示例:用程度获得所有的任务名称。

    • 场景描述 先用sysadmin帐户登陆EOS-GOVERNOR,在 配置 > 定时器 中给default调度器新增定时任务taskA、taskB。 具体新增定时器操作请参见《EOS管理员手册》中的"Governor配置功能\定时器配置\新增定时任务"。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 schedulerName String default 常量 传引用
    返回值 out0 Object taskNames 变量 传引用
    • 参数描述 无。

    • 其他说明 无。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <taskNames __id="1" __isNullOrEmpty="empty" __type="java:[Ljava.lang.String;"/>
        </__root>
    </bizContext>
    
    • 调用后的bizContext
    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <taskNames __id="1" __type="java:[Ljava.lang.String;">
                <__entry __index="0" __type="java:java.lang.String">taskA</__entry>
                <__entry __index="1" __type="java:java.lang.String">taskB</__entry>
            </taskNames>
        </__root>
    </bizContext>
    

    # pause:暂停

    # 【功能说明】

    根据任务名称从指定应用暂停定时任务。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.pause,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    参数 scheduleInfo DataObject Unknown macro: {span} 定时任务对象,需要设置下面属性:scheudlerName:调度器名称taskName:任务名称
    1. 抛出异常说明 无。

    2. 规则说明 无。

    # 【参考案例】

    示例:暂停任务task1。

    • 场景描述 无。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 scheduleInfo DataObect scheduleInfo 变量 传引用
    • 参数描述 无。

    • 其他说明 需要用赋值图元在参数ScheduleInfo对象设置shedulerName和taskName属性指定调度器和定时任务。 根据ScheduleInfo对象的shedulerName和taskName属性暂停定时任务。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <scheduleInfo __id="1" __type="sdo:com.eos.foundation.ScheduleInfo">
                <schedulerName __type="java:java.lang.String">default</schedulerName>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskType/>
                <targetQName/>
                <targetOperation/>
                <isStateful/>
                <cronExpression/>
                <startTime/>
                <endTime/>
                <args __collection="list"/>
            </scheduleInfo>
        </__root>
    </bizContext>
    
    • 调用后的bizContext 同调用前。

    • 查询定时任务系统表,发现状态已改变:

    字段
    EOS_QRTZ_TRIGGERS表
    TRIGGER_NAME eos:trigger:12125717782033
    TRIGGER_GROUP eos:group:eos-default:task1
    JOB_NAME task1
    JOB_GROUP eos:group:eos-default
    IS_VOLATILE 0
    DESCRIPTION
    NEXT_FIRE_TIME 1212632100000
    PREV_FIRE_TIME -1
    TRIGGER_STATE(定时器状态) PAUSED
    TRIGGER_TYPE CRON
    START_TIME 1212571778000
    END_TIME 0
    CALENDAR_NAME
    MISFIRE_INSTR 0
    JOB_DATA <BLOB>

    # remove:删除定时器

    # 【功能说明】

    根据任务名称从指定应用删除定时任务。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.remove,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    类型 名称 数据类型 参数描述
    参数 scheduleInfo DataObject Unknown macro: {span} 定时任务对象,需要设置下面属性:scheudlerName:调度器名称taskName:任务名称
    1. 抛出异常说明 无。

    2. 规则说明 无。

    # 【参考案例】

    示例:删除一个定时任务。

    • 场景描述 无。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 scheduleInfo DataObect scheduleInfo 变量 传引用
    • 参数描述 无。

    • 其他说明 需要用赋值图元在参数ScheduleInfo对象设置shedulerName和taskName属性指定调度器和定时任务。 根据ScheduleInfo对象的shedulerName和taskName属性删除定时任务。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <scheduleInfo __id="1" __type="sdo:com.eos.foundation.ScheduleInfo">
                <schedulerName __type="java:java.lang.String">default</schedulerName>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskType/>
                <targetQName/>
                <targetOperation/>
                <isStateful/>
                <cronExpression/>
                <startTime/>
                <endTime/>
                <args __collection="list"/>
            </scheduleInfo>
        </__root>
    </bizContext>
    
    • 调用后的bizContext 同调用前。

    • 查询定时任务系统相关表,找不到被删除任务的相关信息。

    # resume:重启

    # 【功能说明】

    根据任务名称从指定应用重启定时任务。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.resume,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    参数 scheduleInfo DataObject Unknown macro: {span} 定时任务对象,需要设置下面属性:scheudlerName:调度器名称taskName:任务名称
    1. 抛出异常说明 无。

    2. 规则说明 无。

    # 【参考案例】

    示例:重启定时任务。

    • 场景描述 无。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 scheduleInfo DataObect scheduleInfo 变量 传引用
    • 参数描述 无。

    • 其他说明 需要用赋值图元在参数ScheduleInfo对象设置shedulerName和taskName属性指定调度器和定时任务。 根据ScheduleInfo对象的shedulerName和taskName属性重启定时任务。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <scheduleInfo __id="1" __type="sdo:com.eos.foundation.ScheduleInfo">
                <schedulerName __type="java:java.lang.String">default</schedulerName>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskType/>
                <targetQName/>
                <targetOperation/>
                <isStateful/>
                <cronExpression/>
                <startTime/>
                <endTime/>
                <args __collection="list"/>
            </scheduleInfo>
        </__root>
    </bizContext>
    
    • 调用后的bizContext

      同调用前。

      查询定时任务系统表,发现状态已改变:

    字段
    EOS_QRTZ_TRIGGERS表
    TRIGGER_NAME eos:trigger:12125717782033
    TRIGGER_GROUP eos:group:eos-default:task1
    JOB_NAME task1
    JOB_GROUP eos:group:eos-default
    IS_VOLATILE 0
    DESCRIPTION
    NEXT_FIRE_TIME 1212632100000
    PREV_FIRE_TIME -1
    TRIGGER_STATE(定时任务状态) WAITING
    TRIGGER_TYPE CRON
    START_TIME 1212571778000
    END_TIME 0
    CALENDAR_NAME
    MISFIRE_INSTR 0
    JOB_DATA <BLOB>

    # update:更新定时器

    # 【功能说明】

    根据任务名称从指定应用更新定时任务。

    # 【版本说明】

    从EOS 6.0开始提供。

    # 【引用路径】

    1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.eoscommon.ScheduleUtil.update,包含在com.eos.foundation.jar中。
    2. 运算逻辑定义在构件包com.eos.foundation中。

    # 【使用说明】

    1. 参数说明
    类型 名称 数据类型 参数描述
    参数 scheduleInfo DataObject Unknown macro: {span} 定时任务对象,需要设置下面属性,其他属性可以根据修改需要设置:scheudlerName:调度器名称taskName:任务名称
    1. 抛出异常说明 无。

    2. 规则说明 关于Cron表达式,请参考Quartz及Cron-表达式说明 (opens new window)

    # 【参考案例】

    示例:更新定时任务信息。

    • 场景描述 无。

    • 参数设置

    类型 名称 数据类型 值类别 传递方式
    参数 scheduleInfo DataObect scheduleInfo 变量 传引用
    • 参数描述 无。

    • 其他说明 需要用赋值图元在参数ScheduleInfo对象设置shedulerName和taskName属性指定调度器和定时任务,设置cronExpression属性为0 0-5 14 * * ? 根据ScheduleInfo对象的scheduleName和taskName属性更新定时任务属性。

    • 调用前的bizContext

    <bizContext>
        <__root __id="0" __type="java:java.util.HashMap">
            <scheduleInfo __id="1" __type="sdo:com.eos.foundation.ScheduleInfo">
                <schedulerName __type="java:java.lang.String">default</schedulerName>
                <taskName __type="java:java.lang.String">task1</taskName>
                <taskType/>
                <targetQName/>
                <targetOperation/>
                <isStateful/>
                <cronExpression __type="java:java.lang.String">0 0-5 14 * * ?</cronExpression>
                <startTime/>
                <endTime/>
                <args __collection="list"/>
            </scheduleInfo>
        </__root>
    </bizContext>
    
    • 调用后的bizContext 同调用前。

    • 查询系统表发现触发器表已经修改:

    字段
    TRIGGER_NAME eos:trigger:12125676423590
    TRIGGER_GROUP eos:group:eos-default:task1
    CRON_EXPRESSION 0 0-5 14 * * ?
    TIME_ZONE_ID Asia/Shanghai
    上次更新: 2023/3/24下午7:16:34