Flowable深入浅出-5 Flowable-Modeler详述之开发环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。不经过允许copy,讲追究法律责任,欢迎加入我们的学习QQ群967254284,可以相互交流 https://blog.csdn.net/houyj1986/article/details/85494233

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

前言

  • Flowable的modeler的环境已经搭建完成,并且可以绘制modeler模型了,我们绘制一个简单的流程只有开始和结束的流程节点。

  • 加入启动类,自动引入相关的使用的包。

环境搭建

  1. 安装jdk
    建议使用jdk 8
    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    安装完成后配置java环境变量,这个将bin的环境变量配置到PATH中即可,网上同类教程很多,此处不赘述

  2. 安装mysql 5.7
    下载mysql 建议5.7版本以上,安装步骤也是一步步next,不在此处赘述
    下载地址:
    https://dev.mysql.com/downloads/mysql/

  3. 安装idea
    安装idea社区版本,下载地址如下,安装步骤一步步next
    https://www.jetbrains.com/idea/download/

  4. 新建maven工程
    File-New Project,工程名为flowablestudy
    创建工程

  5. 配置maven,并且建议使用阿里的仓库,maven的下载地址如下:
    http://maven.apache.org/download.cgi
    maven的配置 conf/settings.xml配置添加本地仓库如下:

 <localRepository>D:/program/apache-maven-3.6.0/mvnlib</localRepository>

mirrors中添加阿里服务器

 <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
 

在idea中点击File->Settings,按如下操作:
maven配置成功

  1. 添加一个模块作为工程的一个子模块,在工程上点击右键,New->Module,配置模块如下:
    在这里插入图片描述

  2. 父pom中配置springboot的pom文件

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath />
    </parent>

引入启动依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  1. 加入我们的核心依赖,flowable的启动依赖
    <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.4.0</version>
    </dependency>
  1. 添加一个controller用来测试流程是否启动成功
package com.hyj.controller;

@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";

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


  1. 添加service和serviceimpl查看提供流程的一些服务,本次只有一个启动流程的服务
package com.hyj.service;
/**
 * 流程服务类
 */
public interface IFlowService {

    /**
     * 部署工作流
     */
    Deployment createFlow(String filePath);
}

实现类

package com.hyj.serviceImpl;

@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);
            }
        }
    }
}

  1. 增加启动类扫描我们的包
package com.hyj.main;

//扫描Service
@ComponentScan(basePackages = { "com.hyj.**" })
//扫描Mapper
@MapperScan(basePackages = {"com.hyj.**"})
@SpringBootApplication
public class App {
    private final static Logger logger = LoggerFactory.getLogger(App.class);

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

  1. 配置启动项
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.hyj  # 注意:对应实体类的路径

# 数据源配置
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

  1. 创建一个mysql数据库,flowstudy,设置编码为UTF-8
CREATE DATABASE /*!32312 IF NOT EXISTS*/`flowstudy` /*!40100 DEFAULT CHARACTER SET utf8 */;
  1. 启动服务,启动的时候会自动创建我们需要的表,如果另外一个activity的示例安装过数据库,注意配置上面的启动项的参数,设置nullCatalogMeansCurrent=true,启动建表打印如下:
    启动的时候的建表

  2. mysql中的表如下:
    在这里插入图片描述

  3. 测试查看创建结果
    在这里插入图片描述

  4. 查看流程在表中的内容
    部署ID表act_re_deployment
    在这里插入图片描述
    部署内容表:act_ge_bytearray
    在这里插入图片描述

  5. 代码下载地址
    https://download.csdn.net/download/houyj1986/10889089

  6. 使用的流程文件如下:

<?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="测试BPMN模型" isExecutable="true">
    <documentation>测试BPMN模型</documentation>
    <startEvent id="start" name="开始"></startEvent>
    <endEvent id="end" name="结束"></endEvent>
    <userTask id="testUser" name="用户任务测试"></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>

打赏

如果您觉得该文章对您有帮助,欢迎打赏作者,谢谢。
在这里插入图片描述
在这里插入图片描述

版权

版权所有,侵权必究,代码与文章,使用、copy、转载请联系作者。由书山登峰人创作。

猜你喜欢

转载自blog.csdn.net/houyj1986/article/details/85494233