flowable的一些配置方法整理

背景

最近在研究BPM, 發現了flowable這個框架.

用的版本是docker版本的flowable/all-in-one, 當時的鏡像版本是6.5.0.

爲了圖省事, docker run以後, 我把容器中的tomcat目錄全部複製出來了, 然後再配置下java的一些環境變量啥的(如果有就不用配置了), 就相當於全部安裝完了.

其中包括4個web應用:

  • flowable-admin: 總控制檯
  • flowable-idm: 身份認證(用戶, 用戶組, 權限)
  • flowable-task: 流程, 任務處理
  • flowable-modeler: 流程建模(流程模型創建, 表單, 應用程序, …)

拿來探索之後, 做了如下修改:

修改數據源爲mysql

上面介紹的4個web應用用的數據源都是H2, 此數據庫是完全基於內存的, 重啓tomcat數據就沒了.
所以改成mysql的方便做實驗, 不然每次都得重新創建/導入數據.

增加 mysql JNDI數據源

首先要創建一個數據庫(我這裏就叫flowable)
$ cat tomcat/conf/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 省略... -->
<Context>
	<!-- Default set of monitored resources. If one of these changes, the -->
	<!-- web application will be reloaded. -->
	<WatchedResource>
		WEB-INF/web.xml
	</WatchedResource>
	<WatchedResource>
		WEB-INF/tomcat-web.xml
	</WatchedResource>
	<WatchedResource>
		${catalina.base}/conf/web.xml
	</WatchedResource>
	<Resources cachingAllowed="true" cacheMaxSize="100000" />
	<!-- Uncomment this to disable session persistence across Tomcat restarts -->
	<!-- <Manager pathname="" /> -->

	<!-- 這些是自己增加的  -->
	<Resource auth="Container"
			name="jdbc/flowableDS"
			type="javax.sql.DataSource"
			description="JDBC DataSource"
			url="jdbc:mysql://localhost:3306/flowable?useUnicode=true&amp;characterEncoding=utf8"
			driverClassName="com.mysql.jdbc.Driver"
			username="root"
			password="******"
			defaultAutoCommit="false"
			initialSize="5"
			maxWaitMillis="5000"
			maxTotal="120"
			maxIdle="5"/>
</Context>

使各個應用使用datasource jndi

然後在上述4個應用的對應配置文件中打開datasource的jndi配置.
如對modeler而言
$ cat tomcat/webapps/flowable-modeler/WEB-INF/classes/flowable-default.properties

spring.datasource.jndi-name=jdbc/flowableDS

配置好以後, 重新啓動tomcat, 會發現flowable數據庫中多了很多表出來, 說明配置成功了.

配置郵件服務

flowable支持郵件任務, 但是前提是要配置好郵件發送服務.
由於是task應用發郵件的, 所以改task應用的配置, 找到mail相關的, 改成合適的值:
$ cat tomcat/webapps/flowable-task/WEB-INF/classes/flowable-default.properties

flowable.mail.server.host=smtp.qq.com
flowable.mail.server.port=25
[email protected] # 我的qq郵箱
flowable.mail.server.password=xxx # qq郵箱現在需要什麼授權碼, 這個在qq郵箱設置頁可以獲得.

郵件任務測試

配置好上面的以後, 我製作了一個簡單的流程, 包括郵件任務, 測試可以發送成功.

在這裏插入圖片描述
上面是流程圖, 其中"發送郵件"是一個郵件任務. 其xml表示爲:
cat 模型-發送郵件.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
  <process id="model_send_mail" name="模型-發送郵件" isExecutable="true">
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <userTask id="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2" name="輸入郵件內容等" flowable:candidateGroups="admin" flowable:formKey="model_send_mail" flowable:formFieldValidation="true">
      <extensionElements>
        <modeler:group-info-name-admin xmlns:modeler="http://flowable.org/modeler"><![CDATA[admin group]]></modeler:group-info-name-admin>
        <modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group>
        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <sequenceFlow id="sid-4C9E3145-C9B1-4B3C-A9B3-6E9A85479223" sourceRef="startEvent1" targetRef="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2"></sequenceFlow>
    <serviceTask id="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18" name="發送郵件" flowable:type="mail">
      <extensionElements>
        <flowable:field name="to">
          <flowable:expression><![CDATA[${to}]]></flowable:expression>
        </flowable:field>
        <flowable:field name="from">
          <flowable:expression><![CDATA[${from}]]></flowable:expression>
        </flowable:field>
        <flowable:field name="subject">
          <flowable:expression><![CDATA[${subject}]]></flowable:expression>
        </flowable:field>
        <flowable:field name="text">
          <flowable:expression><![CDATA[${content}]]></flowable:expression>
        </flowable:field>
        <flowable:field name="html">
          <flowable:expression><![CDATA[${html}]]></flowable:expression>
        </flowable:field>
      </extensionElements>
    </serviceTask>
    <sequenceFlow id="sid-1B68CF6A-9A0E-4F93-8A65-1395A351933C" sourceRef="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2" targetRef="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18"></sequenceFlow>
    <endEvent id="sid-04CBB505-2748-45C6-B942-04C3BAB802F4"></endEvent>
    <sequenceFlow id="sid-AA574C01-41E8-4AAC-BF46-99F8860F414E" sourceRef="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18" targetRef="sid-04CBB505-2748-45C6-B942-04C3BAB802F4"></sequenceFlow>
  </process>
</definitions>

啓動流程之後, 用戶填寫表單, 輸入收件人, 郵件主題等, 然後確定.
輸入的值會傳遞給郵件任務, 然後自動發郵件.

集成LDAP

vim tomcat/webapps/flowable-idm/WEB-INF/classes/flowable-default.properties
找到ldap相關配置

#
# LDAP
#
flowable.idm.ldap.enabled=true
flowable.idm.ldap.server=ldap://192.168.3.3
flowable.idm.ldap.port=389
flowable.idm.ldap.user=cn=admin,dc=example,dc=com
flowable.idm.ldap.password=xxxxxx
flowable.idm.ldap.base-dn=dc=example,dc=com
flowable.idm.ldap.user-base-dn=ou=Account,dc=example,dc=com
flowable.idm.ldap.group-base-dn=ou=Group,dc=example,dc=com

# 查找用戶, {0{爲uid, 根據實際情況書寫查詢條件
flowable.idm.ldap.query.user-by-id=(&(objectClass=inetOrgPerson)(uid={0}))

# 根據用戶全名來查找用戶
flowable.idm.ldap.query.user-by-full-name-like=(&(objectClass=inetOrgPerson)(|({0}=*{1}*)({2}=*{3}*)))

# 查找所有用戶
flowable.idm.ldap.query.all-users=(objectClass=inetOrgPerson)

# 查找用戶所屬的組, 這個沒配置出來, 可以忽略
flowable.idm.ldap.query.groups-for-user=(&(objectClass=posixGroup)(memberUid={0}))

# 列出所有組
flowable.idm.ldap.query.all-groups=(objectClass=posixGroup)

# 根據組id獲取組
flowable.idm.ldap.query.group-by-id=(&(objectClass=posixGroup)(cn={0}))

# 各個屬性取哪個字段
flowable.idm.ldap.attribute.user-id=uid
flowable.idm.ldap.attribute.first-name=cn
flowable.idm.ldap.attribute.last-name=sn
flowable.idm.ldap.attribute.email=mail
flowable.idm.ldap.attribute.group-id=cn
flowable.idm.ldap.attribute.group-name=cn
flowable.idm.ldap.attribute.group-type=cn
flowable.idm.ldap.cache.group-size=10000
flowable.idm.ldap.cache.group-expiration=180000

參考

https://jeesite.gitee.io/front/flowable/6.5.0/bpmn/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章