
刚刚开发不久已经踩了两个坑了,嗯哼
遇到问题只能结合官方文档看源码琢磨,之前没有接触过,也挺好的也是一个挑战,笔者会在之后的文章将遇到的坑及解决方案做一一总结,分享给有需要的小伙伴
本篇文章先做个简单入门,由以下几方面构成:①BPMN介绍;②Flowable介绍;③SpringBoot【2.4.3】+Flowable【6.5.0】环境搭建;④实现流程部署;
强调!强调!强调!笔者使用的Flowable版本是6.5.0!
什么是BPMN?
我们看百度百科介绍:由BPMI(The Business Process Management Initiative)开发了一套标准叫业务流程建模符号(BPMN - Business Process Modeling Notation)。在 BPMI Notation Working Group超过2年的努力,于2004年5月对外发布了BPMN 1.0 规范。后BPMI并入到OMG组织,OMG于2011年推出BPMN2.0标准,对BPMN进行了重新定义(Business Process Model and Notation)。BPMN的主要目标是提供一些被所有业务用户容易理解的符号,从创建流程轮廓的业务分析到这些流程的实现,直到最终用户的管理监控。BPMN也支持提供一个内部的模型可以生成可执行的BPEL4WS。因此BPMN的出现,弥补了从业务流程设计到流程开发的间隙。
BPMN定义了一个业务流程图(Business Process Diagram),该业务流程图基于一个流程图(flowcharting),该流程图被设计用于创建业务流程操作的图形化模型。而一个业务流程模型(Business Process Model),指一个由图形对象(graphical objects)组成的网状图,图形对象包括活动(activities)和用于定义这些活动执行顺序的流程控制器(flow controls)。
大白话理解:BPMN是一套符号的标准,这些符号描述了如何做一个业务,并且这个业务在做的过程中被人监控和控制。业务人员和开发人员通过这套图形可以很好的完成协作。
什么是Flowable?
官方描述如下:Flowable提供了一个组高效的核心开源业务流程引擎,为开发人员,系统管理员和业务用户提供工作流和业务流程管理(BPM)平台。全部用Java编写,并且基于Apache 2.0许可的开源,代码在社区维护。其核心是一个快速,经过试验和测试的动态BPMN流程引擎,附带DMN决策表和CMMN Case管理引擎。
大白话理解:Flowable是BPMN的一个基于Java的软件实现,不过Flowable不仅仅包括BPMN,还有DMN决策表和CMMN Case管理引擎,并且有自己的用户管理、微服务API等一系列功能,是一个服务平台。
官方文档:https://flowable.com/open-source/docs/oss-introduction/
源码地址:https://github.com/flowable/flowable-engine
SpringBoot【2.4.3】+Flowable【6.5.0】环境搭建
引入依赖pom
<properties><java.version>1.8</java.version><flowable.version>6.5.0</flowable.version><mysql.version>8.0.22</mysql.version></properties><dependencies><!--web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--flowable依赖--><dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>${flowable.version}</version></dependency><!--数据库依赖--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>
配置application.yml文件
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/flowable-study?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=truedriver-class-name: com.mysql.jdbc.Driverserver:port: 8989
实现流程部署
新增流程部署接口,测试环境是否ok:
@RestController@RequestMapping(value = "/flowable")public class SyFlowController {/*** 流程服务*/@Autowiredprivate SyFlowService syFlowService;@RequestMapping("/deployFlow")@ResponseBodypublic Map<String, String> deployFlow() {Map<String, String> res = new HashMap<>();String flowPath = "D:\\study\\flowable\\flowable.bpmn20.xml";if (null == syFlowService.deployFlow(flowPath)) {res.put("msg", "创建流程失败");res.put("res", "0");return res;}res.put("msg", "创建流程成功");res.put("res", "1");return res;}}
SyFlowService 提供流程部署服务:
/*** 部署工作流*/Deployment deployFlow(String filePath);
实现类如下:
@Servicepublic class SyFlowServiceImpl implements SyFlowService {/*** 日志类*/private static final Logger log = LoggerFactory.getLogger(SyFlowServiceImpl.class);/*** bpmn xml解析器*/private BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();/*** Flowable repositoryService服务*/@Autowiredprivate RepositoryService repositoryService;@Overridepublic Deployment deployFlow(String filePath) {//解析BPMN模型看是否成功XMLStreamReader reader = null;InputStream inputStream = null;try {XMLInputFactory factory = XMLInputFactory.newInstance();inputStream = new FileInputStream(new File(filePath));reader = factory.createXMLStreamReader(inputStream);//校验bpmn xml文件是否异常BpmnModel model = bpmnXMLConverter.convertToBpmnModel(reader);List<Process> processes = model.getProcesses();if (CollectionUtils.isEmpty(processes)) {log.error("BPMN模型没有配置流程");return null;}/*** 获取流程定义信息*/Process mainProcess = model.getMainProcess();//获取流程定义信息//获取流程keyString id = mainProcess.getId();System.out.println("流程定义key:" + id);//获取流程名称String name = mainProcess.getName();System.out.println("流程定义名称:" + name);//获取流程描述String documentation = mainProcess.getDocumentation();System.out.println("流程定义描述:" + documentation);//获取process节点中的扩展属性信息Map<String, List<ExtensionAttribute>> attributes = mainProcess.getAttributes();for (Map.Entry<String, List<ExtensionAttribute>> entry : attributes.entrySet()) {System.out.println("扩展属性key:" + entry.getKey() + ",对应的值:" + entry.getValue().get(0).getValue());}inputStream = new FileInputStream(new File(filePath));Deployment deployment = repositoryService.createDeployment().name("TEST_FLOW.bpmn20.xml").addInputStream(mainProcess.getName(), inputStream).deploy();log.warn("部署流程 name:" + mainProcess.getName() + " " + deployment);return deployment;} catch (Exception e) {log.error("BPMN模型创建流程异常", e);return null;} finally {try {reader.close();} catch (XMLStreamException e) {log.error("关闭异常", e);}}}}
flowable.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="test_bpmn" name="test BPMN" isExecutable="true"><documentation>test BPMN</documentation><startEvent id="start" name="开始"></startEvent><endEvent id="end" name="结束"></endEvent><userTask id="testUser" name="usertask"></userTask><sequenceFlow id="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" sourceRef="start" targetRef="testUser"></sequenceFlow><sequenceFlow id="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" sourceRef="testUser" targetRef="end"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_test_bpmn"><bpmndi:BPMNPlane bpmnElement="test_bpmn" id="BPMNPlane_test_bpmn"><bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start"><omgdc:Bounds height="30.0" width="30.0" x="210.0" y="60.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end"><omgdc:Bounds height="28.0" width="28.0" x="525.0" y="61.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="testUser" id="BPMNShape_testUser"><omgdc:Bounds height="80.0" width="100.0" x="315.0" y="35.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" id="BPMNEdge_sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002"><omgdi:waypoint x="239.94999779398907" y="75.0"></omgdi:waypoint><omgdi:waypoint x="315.0" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" id="BPMNEdge_sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44"><omgdi:waypoint x="414.9499999999903" y="75.0"></omgdi:waypoint><omgdi:waypoint x="525.0" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram></definitions>
创建数据库:flowable-study,utf8编码

第一次启动应用程序flowable会自动创建所需要的数据表:

创建完后mysql中的数据表如下:

测试运行结果


查看数据表数据
部署表act_re_deployment

部署内容表act_ge_bytearray

至此完成了flowable的流程部署操作。
长按二维码关注我们

ITSK
博客|yajing8
我知道你在看哟






