Activiti:定時器事件和郵件任務
開始定時器事件
涉及核心表:ACT_RU_TIMER_JOB
- 可以設定時間,定時開始啟動流程例項。
- 部署流程後,不用
startProcessInstanceByXxxx
啟動流程例項,而是到達設定時間後自動啟動。 - 到達設定時間後,查詢下是否有對應的流程例項。
觸發時間(ISO-8601格式標準):
表示何時觸發;標籤元素 ,時間格式是ISO 8601的固定格式,比如:
<timerEventDefinition>
<timeDate>2008-07-13T19:08:18</timeDate>
</timerEventDefinition>
2008-07-13T19:08:18
持續時間(例如 PT5M):
表示定時器經過多少時間後觸發;標籤元素 ,時間格式為ISO 8601的PT格式,比如:
<timerEventDefinition>
<timeDuration>PT10S</timeDuration>
</timerEventDefinition>
要設定 一年兩個月三天四小時五分六秒 ,可以寫成 P1Y2M3DT4H5M6S
,
P 是開始標記,T 是日期和時間分割標記。沒有日期只有時間T是不能省去,只有日期沒有時間T直接省去 比如:1小時後執行應該寫成 PT1H ,10秒後執行 PT10S ,3天后執行 P3D 。
時間週期 (e.g. R3/PT10H):
表示重複觸發的間隔時間;標籤元素 ,時間格式為ISO 8601的PT格式或Rn格式或變數,比如:
<timerEventDefinition>
<timeCycle>R3/PT10H</timeCycle>
</timerEventDefinition>
- R 表示永遠重複;R1 重複一次;R231重複231次。
- R3/PT10H 表示重複3次每次間隔10小時
測試: 部署流程定義,然後10秒後觀察是否有相關的流程例項.
邊界定時器事件
用於向某節點上新增邊界定時事件,如下:
需求:模擬修一部壞手機,先交給初級工程師修理,定時1分鐘後沒有修好就給中級工程師修理
取消的活動(cancel activity):
設定取消的活動引數,如下圖:
- 勾選 取消的活動 設定持續的時間10秒,當開始流程後,如果 初級工程師 在10秒內沒有處理完,則結束當前任務;
建立分支例項走向下一節點,不在 初級工程師 處停留。(只能查詢到下一節點任務)
- 不勾選 取消的活動 設定持續的時間10秒,當開始流程後,如果 初級工程師 在10秒內沒有處理完,則不會結束當前任務,保留此任務節點,然後建立分支例項走向下一節點。(能查詢到 初級工程師 和 下一 節點 兩個任務)
結束的時間格式(ISO-8601)
表示某個時間讓重複觸發的失效;會在標籤元素 上新增包含 activiti:endDate 屬性(該屬性 為可選非必須的),格式為例如:
<timerEventDefinition>
<timeCycle activiti:endDate="2009-07-13T18:42:11+00:00">R3/PT4H</timeCycle>
</timerEventDefinition>
測試:10s後,初級工程師沒有審批,會自動關閉該任務,並且會開啟新的任務讓中級工程師審批。
中間定時器事件
符號:
需求:設定延遲時間,當任務1完成後,延時指定時間(如 PT20S 20秒),流程再走向任務2。
測試效果:任務1完成後,20s後會自動出現任務2.
郵件任務
開啟QQ郵箱SMTP服務
在qq郵箱設定中,開啟SMTP服務:
生成授權碼:
傳送簡訊後,會生成授權碼
配置application.yml
spring:
activiti:
# QQ郵箱的 SMTP 伺服器
mail-server-host: smtp.qq.com
# 郵箱的埠
mail-server-port: 465
# 使用SSL埠
mail-server-use-ssl: true
# 預設郵件傳送地址,當工作流沒有設定來自(郵件傳送地址),會使用此地址
mail-server-default-from: [email protected]
# 郵件傳送使用者名稱
mail-server-user-name: [email protected]
# 開啟郵箱的授權碼(寫你自己QQ郵箱授權碼)
mail-server-password: xxxxxxxxxxxxxxxxxxxx
繪製郵件傳送流程定義模型
- 郵件任務符號
- 繪製郵件傳送流程定義模型,流程唯一標識:testMail
-
發往:多個收件人郵箱地址使用英文逗號 , 分隔
-
來自:郵件傳送地址,沒有配置使用預設地址。
-
內容: 文字格式的郵件內容
-
html:html格式的郵件內容
-
字元型別:如果郵件內容為中文,則需要指定字符集,不然亂碼。字符集要與資料庫的一樣。
配置資訊可以指定流程變數
測試
部署流程定義,啟動流程例項,完成審批任務,同時設定流程變數
/**
* 啟動流程例項
*/
@Test
public void startProcess2() {
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey("testMail");
Task task = taskService.createTaskQuery()
.processInstanceId(processInstance.getProcessInstanceId())
.taskAssignee("wen")
.singleResult();
//設定流程變數值
Map<String, Object> variables = new HashMap<>();
variables.put("currName", task.getAssignee());
taskService.complete(task.getId(), variables);
}
執行後,收到了郵件