Conditional judgment of timed tasks

  • Last update:  2020-08-26
  • 1. 概述

    1.1 版本

    FineBI 版本JAR新增功能
    5.12020-08-04调度周期>执行条件>自定义类判断中可添加参数并赋值

    1.2 功能简介

    定时任务条件判断是指在执行定时任务之前进行一次校验判断,如果不满足条件就不执行或者延迟后再次校验执行。

    条件判断包含三种类型的选择:始终执行公式判断自定义类判断。具体说明如下所示:

    • 始终执行:不进行条件判断,直接执行定时任务。

    • 公式判断:定时任务在执行前要对当前公式内容进行判定,公式为 true 则继续执行定时任务,如果公式为 false 则不执行或者延迟执行。延迟执行是指在「调度周期」步骤中勾选任务重启,会在间隔一段设定的时间后再次执行定时任务,重新进行条件判断。

    • 自定义类判断:执行自定义类,返回值为 true 的时候执行定时任务。

    本文将介绍公式判断自定义类判断的使用方法。

    2. 公式判断

    本章以 Anna 用户为例,仪表板选择行业应用>零售行业>产品销售分析 ,定时调度任务执行结束后,将定时调度任务的结果以链接消息的形式推送到 Anna 用户的 App 中。

    2.1 仪表板准备

    注:用户需要有仪表板的查看权限、业务包的使用权限才能正常预览仪表板。

    1)管理员进入数据决策系统,点击管理系统>目录管理>行业应用>零售行业>产品销售分析>预览模板,生成「产品销售分析」仪表板的链接。如下图所示:

    2.png

    2)确定 URL 链接中的 IP 为实际 IP ,不能使用 localhost 代替。正确 URL 格式为:http://实际ip:端口号/webroot/decision/v5/design/report/${id}/view,URL 示例如下所示:

    http://145.13.4.243:37799/webroot/decision/v5/design/report/314e48b827d745bba7af145aad903a5e/view

    注:该链接会在定时调度任务「文件处理」步骤中使用。

    2.2 添加任务

    点击管理系统>定时调度>添加任务,如下图所示:

    20.png

    2.3 基本设置

    「任务名称」为公式判断,添加平台用户Anna,点击确定,如下图所示:

    21.png

    2.4 调度对象

    点击下一步,对象类型选择BI模板,选择模板行业应用>零售行业>产品销售分析,如下图所示:

    3.png

    2.5 调度周期

    点击下一步,设置调度周期执行条件选择公式判断,在下方的公式输入框中输入YEAR(TODAY()) = 2020,勾选如果任务中断按以下频率重新启动,设置「两次重启间隔」为 10 分钟,「最多尝试重启次数」为 2 次,如下图所示:

    4.png

    其中公式的含义及任务重启设置的含义如下表所示:

    设置项备注
    公式:YEAR(TODAY()) = 2020任务执行时的年份为 2020 年才满足条件,可以执行定时任务,否则不执行或延迟校验执行
    任务重启设置项如果任务执行时的年份不是 2020 年则进行任务重启,每隔 10 分钟重启一次,重启后再公式判断,公式判断还是不满足则再次任务重启,直到重启过 2 次后,若公式判断还是不满足,则不执行

    2.6 文件处理

    点击下一步,选择客户端通知,勾选App 通知,消息类型选择链接消息,主题和内容为测试,自定义链接中输入本文 2.1 节准备好的仪表板预览链接,点击保存按钮。如下图所示:

    6.png

    2.7 结果查看

    Anna 用户登录 App ,收到一条新消息。如下图所示:

    注:App 访问 BI 工程的步骤请参见:配置服务器访问 BI 工程

    1596680694795259.jpg

    3. 自定义类判断

    自定义类判断是指执行自定义类,返回值为 true 的时候执行定时任务。

    3.1 无参数

    3.1.1 自定义类编写

    在执行定时任务时判断今天是不是周二,如果是周二就执行,不是周二就不执行,Java 文件名称为ExecuteClass.java。代码如下所示:

    package com.fr.schedule;
    import java.util.Calendar;
    import com.fr.schedule.base.provider.ExecuteCondition;
    public class ExecuteClass implements ExecuteCondition {
    public boolean execute() {
    Calendar cal = Calendar.getInstance();
    int dow = cal.get(Calendar.DAY_OF_WEEK);//星期二的dow等于3
    return (dow) == 3;
    }
    }

    编译之后的 ExecuteClass.class 文件保存到%BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夹下,若无 schedule 文件夹,新建即可。

    3.1.2 定时任务设置

    修改本文第二章已设置的定时调度任务,在调度周期设置「执行条件」时,选择自定义类判断,点击右侧的下拉按钮,选择上面保存的 class 文件。如下图所示:

    7.png

    设置完四个步骤之后保存即可。

    3.1.3 效果查看

    如果今天是周二,点击运行监控,可以看到运行信息显示成功,如下图所示:

    1596685515580811.png

    如果今天不是周二,点击运行监控,可以看到运行信息显示快照生成:跳过,如下图所示:

    1596685203814558.png


    3.2 有参数

    注1:2020-08-04 及之后的 JAR,执行条件选择自定义类判断时,可添加参数并赋值。

    注2:所添加的参数名称为字母、数字、中文的组合,参数名称开头不能为数字。

    3.2.1 自定义类编写

    1)点击下载 Java 文件:NewCondition.zip

    执行定时任务时如果参数1的值大于 5 且参数2的值包含「ABC」则执行,代码如下图所示:

    package com.fr.schedule;
    import com.fr.general.GeneralUtils;
    import com.fr.log.FineLoggerFactory;
    import com.fr.schedule.base.provider.impl.AbstractParameterExecuteCondition;
    import com.fr.stable.StringUtils;
    import java.util.List;
    import java.util.Map;
    /**
     * @author Cloud.Liu
     * @version 10.0
     * Created by Cloud.Liu on 2020/5/6
     */
    public class NewCondition extends AbstractParameterExecuteCondition {

        @Override
        public boolean execute(List<Map<String, Object>> paramList) {
            FineLoggerFactory.getLogger().error("选择了新条件类,根据情况跳过");
            //如果参数数量为空,恒成功运行
            if (paramList.size() < 1) {
                return true;
            }
            /*
             * 参数列表:
             * 参数1名称:参数1
             * 参数1值:一个整数
             * 参数2名称:参数2
             * 参数2值:一个字符串
             *
             * 则这里的paramList会有两个Map,对应两个参数
             * 每个Map有name和value俩项
             * name是参数名 value是参数值
             *
             * 这里遍历paramList,取出这俩参数
             */
            int param1 = 0;
            String param2 = StringUtils.EMPTY;
            //遍历参数列表,给俩参数赋值
            for (Map<String, Object> map : paramList) {
                if (StringUtils.equals(GeneralUtils.objectToString(map.get("name")), "参数1")) {
                    param1 = Integer.parseInt(GeneralUtils.objectToString(map.get("value")));
                } else if (StringUtils.equals(GeneralUtils.objectToString(map.get("name")), "参数2")) {
                    param2 = GeneralUtils.objectToString(map.get("value"));
                }
            }
           
            //如果参数1的值大于5且参数2的值包含"ABC" 则执行
            //否则不执行
            if (param1 > 5 && param2.contains("ABC")) {
                return true;
            } else {
                return false;
            }
        }
    }

    2)编译之后的 class 文件保存到%BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夹下,若无 schedule 文件夹,新建即可。

    3.2.2 定时任务设置

    修改本文第二章已设置的定时调度任务,修改任务名称为自定义类判断。在调度周期设置「执行条件」时,选择自定义类判断,点击右侧的下拉按钮,选择上面保存的 class 文件,并添加参数1参数2,分别赋值为 ABC,如下图所示:

    10.png

    设置完四个步骤之后保存即可。

    3.2.3 效果查看

    点击运行监控,可以看到运行信息显示成功,如下图所示:

    1596684788691962.png


    参数1参数2的值不满足「执行条件」,即将参数1的值改为4,点击运行监控,可以看到运行信息显示快照生成:跳过,如下图所示:


    1596684900768960.png

    附件列表


    主题: 隐藏by Chauvet
    • Helpful
    • Not helpful
    • Only read

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    Get
    Help
    Online Support
    Professional technical support is provided to quickly help you solve problems.
    Online support is available from 9:00-12:00 and 13:30-17:30 on weekdays.
    Page Feedback
    You can provide suggestions and feedback for the current web page.
    Pre-Sales Consultation
    Business Consultation
    Business: international@fanruan.com
    Support: support@fanruan.com
    Page Feedback
    *Problem Type
    Cannot be empty
    Problem Description
    0/1000
    Cannot be empty

    Submitted successfully

    Network busy