1. 程式人生 > 其它 >Activiti:定時器事件和郵件任務

Activiti:定時器事件和郵件任務

開始定時器事件

涉及核心表:ACT_RU_TIMER_JOB

  • 可以設定時間,定時開始啟動流程例項。
  • 部署流程後,不用 startProcessInstanceByXxxx 啟動流程例項,而是到達設定時間後自動啟動。
  • 到達設定時間後,查詢下是否有對應的流程例項。

觸發時間(ISO-8601格式標準):

表示何時觸發;標籤元素 ,時間格式是ISO 8601的固定格式,比如:

<timerEventDefinition>
	<timeDate>2008-07-13T19:08:18</timeDate>
</timerEventDefinition>

2008-07-13T19:08:18

,T是日期和時間分割標記。

持續時間(例如 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

繪製郵件傳送流程定義模型

  1. 郵件任務符號
  1. 繪製郵件傳送流程定義模型,流程唯一標識: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);
    }

執行後,收到了郵件