跳至主要內容

Flowable-3.构建简单DEMO

holic-x...大约 3 分钟框架BPMFlowable

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()

image-20200613080731764

实际上在设计流程图的时候要明确思路,在程序接口设计的过程结合流程图的思路设计接口

2.测试服务接口

流程说明:

客户经理岗位新建一个业务流程,完成信息录入,随后提交数据给产品经理进行‘业务审核’

产品经理岗位审核通过则通知客户经理进行收款汇出操作,最后结束流程;审核不通过则直接结束流程

此处为了测试业务流程,暂时业务节点指定分配用户为动态指定的某个人(也可以是用户组)

image-20200614142707924

【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