Flowable-3.构建简单DEMO
...大约 3 分钟
Flowable框架学习笔记-03-简单项目
Springboot+Flowable项目整合小DEMO
1.项目创建、配置
【1】创建Springboot项目,引入Flowable、数据库等相关jar依赖
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.5.0</version>
</dependency>
【2】flowable依赖
# springboot config
server:
# 服务器的HTTP端口,默认为80
port: 8090
servlet:
# 应用的访问路径(指定访问前缀)
context-path: /sbf-demo
# spring config
spring:
# datasource config
datasource:
# url: jdbc:mysql://localhost:3306/mip-local?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
username: CCB-WORK
password: 123456
driver-class-name: oracle.jdbc.driver.OracleDriver
type: com.alibaba.druid.pool.DruidDataSource
# flowable相关
flowable:
#关闭定时任务JOB
async-executor-activate: false
【3】BPMN流程文件定义、配置
可使用BPMN-UI工具创建相应的BPMN文件流程,随后导出bpmn文件并将其放在项目的资源文件夹resources的processes文件夹下
需要注意的是,如果是放置在resources下的processes文件夹下的bpmn文件,项目启动的时候Springboot会自动部署该流程(如果文件内容变更则相应进行版本迭代),因此项目启动后可直接发起流程进行测试
但如果是放置在其他路径的bpmn文件,则需要手动部署该bpmn流程,例如可以通过RepositoryService
提供的接口执行部署操作,只有部署
之后的流程才能够发起流程节点(实际应用中需要对流程进行额外管理,除此之外RepositoryService
还提供了暂停(挂起)
、激活(启用)
概念)
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource(xmlName)
.deploy()
实际上在设计流程图的时候要明确思路,在程序接口设计的过程结合流程图的思路设计接口
2.测试服务接口
流程说明:
客户经理岗位新建一个业务流程,完成信息录入,随后提交数据给产品经理进行‘业务审核’
产品经理岗位审核通过则通知客户经理进行收款汇出操作,最后结束流程;审核不通过则直接结束流程
此处为了测试业务流程,暂时业务节点指定分配用户为动态指定的某个人(也可以是用户组)
【1】部署项目流程
将设计器生成的bpmn文件放在resource文件夹下,随后调用接口服务部署相应的bpmn文件(此处为简单测试,暂定一次部署只发布一个bpmn文件)
接口访问:http://localhost:8090/sbf-demo/manage/deployDef?xmlName=xxx
@RequestMapping("/deployDef")
public void deployDef(String xmlName) {
// RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource(xmlName)
.deploy();
// 一个流程定义对应多个流程实例
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId())
.singleResult();
System.out.println("Found process definition : " + processDefinition.getName());
}
【2】启动项目流程
ProcessInstance processInstance = null;
Map<String,Object> variables=new HashMap<String,Object>();
// 方式1:根据key启动项目流程(以最新版本的流程定义为参考)
processInstance = runtimeService.startProcessInstanceByKey("my-process", variables);
// 方式2:根据流程定义id启动项目流程
processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), variables);
// 方式3:根据processInstanceBuilder启动流程
ProcessInstanceBuilder piBuilder = runtimeService.createProcessInstanceBuilder();
processInstance = piBuilder.businessKey("businessKey001")
.processDefinitionKey("my-process")
.variables(variables)
.start();
Powered by Waline v3.1.3