工作流开发
工作流开发主要分成两部分:
一部分是工作流服务本身,工作流服务是一个独立运行的服务,它独立于任何一业务, 它的主要功能是提供工作流的运行环境,包括工作流的定义、工作流的运行、工作流的监控等等。
另一部分是业务跟流程的集成,业务跟流程的集成主要是指业务系统如何调用工作流服务,怎样使用流程中的定义,运行时怎样读取相应的变量,怎样处理流程中的任务等等。 当然这部分不需要业务系统自己去实现,工作流服务提供了相应的sdk,业务系统只需要继承相应的类、接口或调用相应的接口即可。
工作原理

工作流服务
工作流服务是一个独立运行的服务,它独立于任何一业务,一般由平台独立提供,平台提供有两种形式:
独立服务形式
服务镜像
平台提供独立的服务镜像,业务系统中只需要配置相应的运行参数即可,不需要关心服务的运行环境,也不需要关心服务的运行状态。 一般情况下,本地运行的话,可以直接把镜像导到本地docker,然后运行即可,注意使用-e 加上相应运行时的参数。
参数可以参考:
环境变量
请根据实际情况配置相应的参数,例如:
docker run -d --name wf -p 8003:8003 \
-e "INCLOUD_NACOS_SERVICE_HOST=192.168.0.79"
...
incloud-base-wf:5.1.0-SNAPSHOT
k8s环境配置
如果是开发环境,建议部署k8s环境中,请把相应的参数配置到k8s的配置文件中,或者联系平台开发人员,协助编写相应的K8S配置文件。
工作流的nacos配置参考
incloud:
table:
packages:
- com.netwisd.base.wf.entity
openapi:
prefix: wf
camunda:
bpm:
database:
table-prefix: incloud_base_wf_
schema-update: false
#type: mysql
type: postgres
seata:
registry:
type: nacos
nacos:
application: seata-server
server-addr: ${INCLOUD_NACOS_SERVICE_HOST}:${INCLOUD_NACOS_SERVICE_PORT}
group : "DEFAULT_GROUP"
namespace: ${INCLOUD_NACOS_NAMESPACE}
username: "nacos"
password: "nacos"
service:
vgroup-mapping:
incloud-base-wf-seata-service-group: default
tx-service-group: incloud-base-wf-seata-service-group
starter包形式
为了方便获取工作流的服务包,平台提供工作流服务的starter包,业务系统只需要创建一个工作流服务,引入相应的starter包,即可使用工作流服务。
pom
一般会创建一个maven的子模块,命名为:incloud-base-wf,然后引入相应的starter包,例如:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>incloud-base</artifactId>
<groupId>com.netwisd</groupId>
<version>5.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>incloud-base-wf</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.netwisd</groupId>
<artifactId>incloud-base-dependency-wf</artifactId>
<version>5.1.0-SNAPSHOT</version>
</dependency>
<!-- openApi -->
<dependency>
<groupId>com.netwisd</groupId>
<artifactId>incloud-starter-base-openapi</artifactId>
<version>5.1.0-SNAPSHOT</version>
</dependency>
<!-- netwisd security模块 -->
<dependency>
<groupId>com.netwisd</groupId>
<artifactId>incloud-starter-base-oauth</artifactId>
<version>5.1.0-SNAPSHOT</version>
</dependency>
<!-- nacos的注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos的配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>
参考上面的pom配置,可以在本地创建一个工作流服务。然后按正常的服务启动即可,不管是你把他再做成镜像或者以jar包形式运行都可以。
Dockerfile
如果想把工作流做成docker镜像,可以参考下面的Dockerfile
FROM amazoncorretto:17
#作者
MAINTAINER zouliming@netwisd.com
#工作空间
WORKDIR /root/incloud
#时区同步
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#对外映射的端口
EXPOSE 8003
ADD ./target/incloud-base-wf.jar ./
#-Djava.security.egd=file:/dev/./urandom参数是优化tomcat启动速度的,我们工程中使用undertom,不需要这玩意儿
CMD java --add-opens java.base/java.lang.reflect=ALL-UNNAMED -Xms128m -Xmx2048m -jar incloud-base-wf.jar
运行参数
不管是哪种形式,注意运行工作流时,需要加上jvm的相应参数:
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
业务基于工作流开发
业务集成工作流
业务集成指的就是业务开发时,怎样使用工作流实现流程的跳转,选人,办理、提交等业务操作。
平台对工作流进行了进一步的封装,给业务提供了业务上集成使用的starter包。使用下面的starter包,可以很方便的集成工作流。
...
<!-- wf模块 -->
<dependency>
<groupId>com.netwisd</groupId>
<artifactId>incloud-starter-base-wf</artifactId>
<version>5.1.0-SNAPSHOT</version>
</dependency>
...
开发业务流程
生成流程代码
使用数据建模 或后台代码生成,生成工作流相关的代码,打包构建后即可。
代码生成 可以参考:
【代码生成】
数据建模 可以参考:
【代码生成】
Last modified: 20 一月 2025