前言

工作流引擎,现在Java世界使用的主流是Activiti 和 Flowable 这两款。Flowable 是Activiti 的fork 分支,所以用法其实差不多。
最理想的状态,引擎能够提供一个rest


目录

  • 前言
  • 依赖
  • 与Spring boot 整合
  • 增加RestResponseFactory 和 ContentTypeResolver 提供rest服务
  • 解决中文乱码
  • 使用
  • Rest API doc
  • 测试


依赖

flowable 所有的依赖都在maven center里,所以上maven center 里查一下 flowable 已经上传了依赖。

查询地址 https://search.maven.org/search?q=flowable-spring-boot-starter

现有的依赖列表

Group ID

Artifact ID

说明

org.flowable

flowable-spring-boot-starter

spring boot flowable 依赖

org.flowable

flowable-spring-boot-starter-rest-api

spring boot flowable 全部五个模块的 rest api 的依赖,已废弃

org.flowable

flowable-spring-boot-starter-process-rest

spring boot flowable 流程引擎 ProcessEngine rest api 的依赖

org.flowable

flowable-spring-boot-starter-rest-api

spring boot flowable 决策引擎 DmnEngine rest api 的依赖

org.flowable

flowable-spring-boot-starter-rest-api

spring boot flowable CMMN 决策引擎 CMMNEngine api 的依赖

其他的各位看官自行查看,此处仅列出我们需要用的。

与Spring boot 整合

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.unreal</groupId>
    <artifactId>flowable-rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>parent</name>
    <url>http://maven.apache.org</url>

    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter-process-rest</artifactId>
            <version>${flowable.version}</version>
        </dependency>

    </dependencies>

</project>

增加RestResponseFactory 和 ContentTypeResolver 提供rest服务

@Bean
    public RestResponseFactory restResponseFactory() {
        return new RestResponseFactory(new ObjectMapper());
    }

    @Bean
    public ContentTypeResolver contentTypeResolver() {
        return new DefaultContentTypeResolver();
    }

解决中文乱码

@Bean
    SpringProcessEngineConfiguration processEngineConfiguration(SimpleDriverDataSource dataSource, DataSourceTransactionManager transactionManager, FormEngineConfiguration formEngineConfiguration, IdmEngineConfiguration idmEngineConfiguration) throws IOException {
        SpringProcessEngineConfiguration cfg = new SpringProcessEngineConfiguration();
        cfg.setDataSource(dataSource).setDatabaseSchemaUpdate("true").setAsyncExecutorActivate(true);
        Resource[] resources = this.applicationContext.getResources("classpath:bpmn/process/*.bpmn20.xml");
        String classPath = ResourceUtils.getURL("classpath:").getPath();
        this.showResourceLog(resources);
        cfg.setDeploymentResources(resources);
        cfg.setTransactionManager(transactionManager);
        FormEngineConfigurator formEngineConfigurator = new FormEngineConfigurator();
        formEngineConfigurator.setFormEngineConfiguration(formEngineConfiguration);
        cfg.addConfigurator(formEngineConfigurator);
        IdmEngineConfigurator idmEngineConfigurator = new IdmEngineConfigurator();
        idmEngineConfigurator.setIdmEngineConfiguration(idmEngineConfiguration);
        cfg.addConfigurator(idmEngineConfigurator);
        cfg.setActivityFontName("宋体");//windows 下使用 中文字体 ,linux 需要换成支持中文的字体
        cfg.setLabelFontName("宋体");
        cfg.setAnnotationFontName("宋体");
        cfg.buildProcessEngine();
        return cfg;
    }

使用

官方 tomcat 部署方式,是需要使用idm登录或者在rest-api 上使用Basic auth 来使用rest服务。
但是博文里这种方式,直接可以访问,不需要验证。
在不改变server.port 的参数时。默认端口是8080.
请求地址如下:

process-api 是 依赖了flowable-spring-boot-starter-process-rest ,
dmn-api 需要依赖flowable-spring-boot-starter-dmn-rest ,
cmmn-api 需要依赖flowable-spring-boot-starter-cmmn-rest

Rest API doc

官方网站上有 rest -api 的说明,请自行查看

https://www.flowable.org/docs/userguide/index.html#restApiChapter

测试

Postman 导入下面的测试集合自行玩一下吧

链接: https://pan.baidu.com/s/1gRPw9O-LO-NCMVL3tl0Faw
提取码: 3k9k