天天看点

第5篇:Flowable-Modeler详述之开发环境搭建

文章目录

  • ​​一、环境搭建​​
  • ​​1. 下载/安装jdk​​
  • ​​2. 安装mysql 5.7​​
  • ​​3. 安装idea​​
  • ​​4. 配置maven​​
  • ​​4.1. 配置maven仓库​​
  • ​​4.2. mirrors中添加阿里服务器​​
  • ​​4.3. 在idea中配置maven​​
  • ​​5. 新建maven工程​​
  • ​​6. 新建子工程​​
  • ​​二、依赖引入​​
  • ​​2.1. 父工程maven依赖​​
  • ​​2.2. 子工程Maven依赖​​
  • ​​三 、案例演练​​
  • ​​3.1. 添加一个controller用来测试流程是否启动成功​​
  • ​​3.2. 新建接口​​
  • ​​3.3. 新建逻辑处理类​​
  • ​​3.4. 增加启动类和包扫描​​
  • ​​3.5. 配置yml文件​​
  • ​​3.6. 创建一个mysql数据库​​
  • ​​3.7. 启动服务​​
  • ​​3.8. mysql中的表总览​​
  • ​​3.9. 测试查看创建结果​​
  • ​​3.10 . 查看流程在表中的内容​​
前言:
  1. Flowable的modeler的环境已经搭建完成,并且可以绘制modeler模型了,我们绘制一个简>单的流程只有开始和结束的流程节点。
  2. 加入启动类,自动引入相关的使用的包。

一、环境搭建

1. 下载/安装jdk

-建议使用jdk 8

JDK环境变量配置_windows

2. 安装mysql 5.7

win10 下安装、配置、启动mysql

3. 安装idea

官网地址:​​https://www.jetbrains.com/idea/download/​​

IntelliJ IDEA 2019 下载安装

4. 配置maven

4.1. 配置maven仓库

maven的配置 conf/settings.xml配置添加本地仓库如下:

第5篇:Flowable-Modeler详述之开发环境搭建
<localRepository>D:\rep</localRepository>      
第5篇:Flowable-Modeler详述之开发环境搭建

4.2. mirrors中添加阿里服务器

第5篇:Flowable-Modeler详述之开发环境搭建
<mirror>
       <id>alimaven</id>
         <name>aliyun maven</name>
         <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
         <mirrorOf>central</mirrorOf>
    </mirror>      

4.3. 在idea中配置maven

点击​

​File->Settings​

​按如下操作

第5篇:Flowable-Modeler详述之开发环境搭建

5. 新建maven工程

【File】-【New Project】-,工程名为 flowablestudy

第5篇:Flowable-Modeler详述之开发环境搭建
第5篇:Flowable-Modeler详述之开发环境搭建
第5篇:Flowable-Modeler详述之开发环境搭建
第5篇:Flowable-Modeler详述之开发环境搭建
第5篇:Flowable-Modeler详述之开发环境搭建
第5篇:Flowable-Modeler详述之开发环境搭建

6. 新建子工程

  • 添加一个模块作为工程的一个子模块,在工程上点击右键,New->Module,配置模块如下:
  • 第5篇:Flowable-Modeler详述之开发环境搭建
    第5篇:Flowable-Modeler详述之开发环境搭建
    第5篇:Flowable-Modeler详述之开发环境搭建
    第5篇:Flowable-Modeler详述之开发环境搭建

二、依赖引入

2.1. 父工程maven依赖

  • pom中配置springboot的pom文件
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gblfy</groupId>
    <artifactId>flowablestudy</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>flowablelech5</module>
    </modules>

    <!--springboot 父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

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

        <!-- SpringBoot 拦截器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.4.1</version>
        </dependency>

        <!--常用工具类 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

        <!--集合常用工具类 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.2</version>
        </dependency>

        <!--io常用工具类 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

        <!--文件上传工具类 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
    </dependencies>
</project>      

2.2. 子工程Maven依赖

<?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>
        <groupId>com.gblfy</groupId>
        <artifactId>flowablestudy</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>flowablelech5</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-engine</artifactId>
            <version>6.4.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring</artifactId>
            <version>6.4.1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.gblfy.FlowableApplication</mainClass>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>      

三 、案例演练

3.1. 添加一个controller用来测试流程是否启动成功

package com.gblfy.controller;

import com.gblfy.service.IFlowService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * @author gblfy
 * @ClassNme FlowController
 * @Description TODO
 * @Date 2019/11/4 13:58
 * @version1.0
 */
@Controller
@RequestMapping(value = "flow")
public class FlowController {
    /**
     * 日志类
     */
    private static final Logger log = LoggerFactory.getLogger(FlowController.class);
    /**
     * 流程处理服务
     */
    @Autowired
    private IFlowService flowService;

    @RequestMapping("/create")
    @ResponseBody
    public Map<String,String> createFlow(){
        Map<String,String> res =new HashMap<>();

//        String flowPath ="E:\\flowablestudy\\flowablech5\\src\\main\\resources\\flows\\测试BPMN模型.bpmn20.xml";
        String flowPath ="C:\\Users\\gblfy\\Desktop\\Workflow\\flowablestudy\\flowablelech5\\src\\main\\resources\\processes\\测试BPMN模型.bpmn20.xml";

        if (null == flowService.createFlow(flowPath)){
            res.put("msg","创建流程失败");
            res.put("res","0");
            return res;
        }
        res.put("msg","创建流程成功");
        res.put("res","1");
        return res;
    }
}      

3.2. 新建接口

  • 添加service查看提供流程的一些服务,本次只有一个启动流程的服务
  • IFlowService
package com.gblfy.service;

import org.flowable.engine.repository.Deployment;

/**
 * 流程服务类
 */
public interface IFlowService {
    /**
     * 部署工作流
     */
    Deployment createFlow(String filePath);
}
      

3.3. 新建逻辑处理类

  • FlowServiceImpl
package com.gblfy.service.impl;

import com.gblfy.service.IFlowService;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.Process;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.DeploymentBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

/**
 * @author gblfy
 * @ClassNme IFlowServiceImpl
 * @Description TODO
 * @Date 2019/11/4 14:01
 * @version1.0
 */
@Primary
@Service
public class FlowServiceImpl implements IFlowService {
    /**
     * 日志类
     */
    private static final Logger log = LoggerFactory.getLogger(FlowServiceImpl.class);
    /**
     * Flowable运行时服务
     */
    @Autowired
    private RepositoryService repositoryService;


    @Override
    public  Deployment  createFlow(String filePath) {

        //解析BPMN模型看是否成功
        XMLStreamReader reader = null;
        InputStream inputStream = null;
        try {
            BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();
            XMLInputFactory factory = XMLInputFactory.newInstance();
            inputStream=new FileInputStream(new File(filePath));
            reader = factory.createXMLStreamReader(inputStream);
            BpmnModel model = bpmnXMLConverter.convertToBpmnModel(reader);
            List<Process> processes = model.getProcesses();
            Process curProcess = null;
            if (CollectionUtils.isEmpty(processes)) {
                log.error("BPMN模型没有配置流程");
                return null;
            }

            curProcess = processes.get(0);

            inputStream=new FileInputStream(new File(filePath));
            DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().name("TEST_FLOW")
                    .addInputStream(curProcess.getName(),inputStream);

            Deployment deployment= deploymentBuilder.deploy();

            log.warn("部署流程 name:"+curProcess.getName() + " "+deployment);
            return deployment;
        }
        catch (Exception e){
            log.error("BPMN模型创建流程异常",e);
            return null;
        }
        finally {
            try {
                reader.close();
            } catch (XMLStreamException e) {
                log.error("关闭异常",e);
            }
        }
    }
}
      

3.4. 增加启动类和包扫描

package com.gblfy;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author gblfy
 * @ClassNme FlowableApplication
 * @Description TODO
 * @Date 2019/11/4 14:07
 * @version1.0
 */
//扫描Service
@ComponentScan(basePackages = { "com.gblfy.**" })
//扫描Mapper
@MapperScan(basePackages = {"com.gblfy.**"})
@SpringBootApplication
public class FlowableApplication {

    private final static Logger logger = LoggerFactory.getLogger(FlowableApplication.class);

    public static void main(String[] args){
        logger.info("开始启动服务 ");
        SpringApplication.run(FlowableApplication.class,args);
        logger.info("完成启动服务 ");
    }
}      

3.5. 配置yml文件

server:
  port: 8989
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # tomcat最大线程数,默认为200
    max-threads: 200
    # Tomcat启动初始化的线程数,默认值25
    min-spare-threads: 30

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.gblfy  # 注意:对应实体类的路径

# 数据源配置
spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/flowstudy?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoReconnect=true&&zeroDateTimeBehavior=convertToNull&useSSL=true&allowMulQueries=true&&nullCatalogMeansCurrent=true
    username: root
    password: root      

3.6. 创建一个mysql数据库

  • flowstudy,设置编码为UTF-8
CREATE DATABASE /*!32312 IF NOT EXISTS*/`flowstudy` /*!40100 DEFAULT CHARACTER SET utf8 */;      

3.7. 启动服务

启动的时候会自动创建我们需要的表,如果另外一个activity的示例安装过数据库,注意配置上面的启动项的参数,设置​

​nullCatalogMeansCurrent=true​

​,启动建表打印如下:

第5篇:Flowable-Modeler详述之开发环境搭建

3.8. mysql中的表总览

第5篇:Flowable-Modeler详述之开发环境搭建

3.9. 测试查看创建结果

第5篇:Flowable-Modeler详述之开发环境搭建

3.10 . 查看流程在表中的内容

  • 部署ID表 act_re_deployment
  • 第5篇:Flowable-Modeler详述之开发环境搭建
  • 部署内容表:act_ge_bytearray
  • 第5篇:Flowable-Modeler详述之开发环境搭建