1. 概述
1.1 版本
報表服務器版本 | JAR | 新增功能 |
---|---|---|
10.0 | 2020-06-08 | 調度周期>執行條件>自定義類判斷中可添加參數并賦值 |
1.2 功能簡介
定時任務條件判斷是指在執行定時任務之前進行一次校驗判斷,如果不滿足條件就不執行或者延遲後再次校驗執行。
注:若在調度周期步驟中勾選「任務重啓」,延遲一段時間後再次校驗執行。
條件判斷包含三種類型的選擇:始終執行、公式判斷和自定義類判斷。
始終執行,就是不進行條件判斷,直接執行定時任務,下面介紹公式判斷和自定義類判斷。
2. 公式判斷
公式判斷就是指定時任務在執行前要對當前公式内容進行判定,公式爲真則繼續執行定時任務,如果公式爲假則不執行或者延遲執行。
延遲執行是指在調度周期步驟中勾選「任務重啓」,會在間隔一段設定的時間後再次執行定時任務,重新進行條件判斷,以此類推,當重啓次數達到設置值的時候,條件判斷還是不滿足,則不執行,如果中間有一次滿足則執行定時任務。
2.1 模板準備
打開模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\日報.cpt,查詢一段時間内的數據信息情況。
2.2 添加任務
管理員進入數據決策系統,點擊管理系統>定時調度>添加任務,如下圖所示:
2.3 基本設置
「任務名稱」爲公式判斷,添加平台用戶demo,點擊确定,如下圖所示:
2.4 調度對象
點擊下一步,選擇模板爲日報.cpt,點擊設置參數默認值,文件名稱爲${now()} ,如下圖所示:
2.5 調度周期
點擊下一步,設置 , 選擇公式判斷,在右側的公式輸入框中輸入E3>50,勾選如果任務中斷按以下頻率重新啓動,設置「兩次重啓間隔」爲 1 分鍾,「最多嘗試重啓次數」爲 2 次,如下圖所示:
其中公式的含義及任務重啓設置的含義如下表所示:
設置項 | 備注 |
---|---|
公式:E3>50 | 表示定時任務綁定的模板中 E3 單元格大於 50 才能滿足條件,可以執行定時任務,否則不執行或延遲校驗執行 |
任務重啓設置項 | 如果 E3 單元格内容小於 50 則進行任務重啓,每隔一分鍾重啓一次,重啓後再公式判斷,公式判斷還是不滿足則再次任務重啓,直到重啓過 2 次後,若公式判斷還是不滿足,則不執行 |
2.6 文件處理
點擊下一步,選擇平台通知,主題爲 FRTest ,内容爲公式判斷,點擊保存按鈕,如下圖所示:
2.7 結果查看
運行後在「公式判斷任務已經運行結束,如下圖所示:
可以看到點擊運行監控,查看該任務執行的監控,如下圖所示:
由運行監控可知,任務重啓了兩次,模板都不滿足執行條件,不執行直接跳過直至重啓最大設置次數,然後結束。
3. 自定義類判斷
自定義類判斷是指執行自定義類,返回值爲 true 的時候執行定時任務。
定時任務的自定義類需要實現 com.fr.schedule.base.provider.ExecuteCondition 接口,該接口有一個方法 public boolean execute(),完成條件判斷邏輯并返回判斷結果。
3.1 無參數
3.1.1 自定義類編寫
在執行定時任務時判斷今天是不是周二,如果是周二就執行,不是周二就不執行,代碼如下所示:
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;
}
}
編譯之後的 class 文件保存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夾下。
3.1.2 定時任務設置
添加一個定時任務自定義類判斷,在調度周期設置「執行條件」時,選擇自定義類判斷,點擊右側的下拉按鈕,選擇上面保存的 class 文件。如下圖所示:
設置完四個步驟之後保存即可。
3.1.3 效果查看
如果今天是周二,點擊
,可以看到 顯示成功,如下圖所示:如果今天不是周二,點擊快照生成:跳過,如下圖所示:
,可以看到 顯示3.2 有參數
注1:2020-06-08 及之後的 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 文件保存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夾下。
3.2.2 定時任務設置
添加一個定時任務自定義類判斷,在調度周期設置「執行條件」時,選擇自定義類判斷,點擊右側的下拉按鈕,選擇上面保存的 class 文件,并添加參數1和參數2,分别賦值爲 6 、ABC,如下圖所示:
設置完四個步驟之後保存即可。
3.2.3 效果查看
點擊運行監控,可以看到運行信息顯示成功,如下圖所示:
若參數1和參數2的值不滿足「執行條件」,即将參數1的值改爲4,點擊運行監控,可以看到運行信息顯示快照生成:跳過,如下圖所示: