activiti7工作流配置

参考:http://www.yund.tech/zdetail.html?type=1&id=babd8930-f8da-4659-a38a-73d01ce6b531

一、开发前环境准备

Idea(2019.2.3),springboot(2.2.7),activiti7,mybatis(2.1.2), druid(1.1.10);

1、插件下载

插件官网:https://plugins.jetbrains.com/plugin/7429-actibpm/versions

下载完成之后,不用解压,建议放到idea安装目录的plugins下:

 2.然后从本地安装插件,选择刚才那个插件包,安装完毕之后要重启idea才生效:

 安装完成重启之后,选择新建,则可以看见bpmnfile,则说明成功了:

二、环境配置

 1 maven依赖

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.0.0.SR1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-image-generator</artifactId>
            <version>7.1.0.M1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.1</version>
        </dependency>

2数据源配置,为了将业务数据库和工作流数据库放一起,数据源配置如下(单数据源配置还没解决):

spring:
  activiti:
    database-schema-update: true
    job-executor-activate: true # asyncExecutorEnabled属性设置设置true后将代替那些老的Job executor
    history-level: full
    db-history-used: true
    check-process-definitions: false # 自动部署验证设置:true-开启(默认)、false-关闭
    main:
      allow-bean-definition-overriding: true
  datasource:
    dynamic:
      primary: slave
      strict: false
      datasource:
        master:
          username: root
          password: 111
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          url: jdbc:mysql://39.98.100.58:3306/test?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&autoReconnct=true&autoReconnectForPools=true&allowMultiQueries=true
        slave:
          username: root
          password: 111
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://39.198.100.58:3306/test?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&autoReconnct=true&autoReconnectForPools=true&allowMultiQueries=true

3定义生成工作流表

   @Test
    public void createActiviti() throws Exception {

        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        //定义连接mysql数据库
        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
        configuration.setJdbcUrl("jdbc:mysql://39.98.100.58:3306/test?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&autoReconnct=true&autoReconnectForPools=true&allowMultiQueries=true&nullCatalogMeansCurrent=true");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("111");

        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //activiti核心对象(流程引擎)
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.out.println("processEngine:" + processEngine);
    }

启动报错,原因是启动时没有自动创建activiti表,所以没有查询到相关表;

解决:在数据库连接池的url上加上:nullCatalogMeansCurrent=true

三、工作流部署

1使用idea画部署流程图

画工作流主要用到图中的三个图标,StartEvent、UserTask、EndEvent,直接通过拖拽就可以了

 点击空白处,设置途中的id为流程key和流程名字

 编辑该节点,可以随意的指定该节点的assignee,通过这个assignee来查询该节点所有的代办任务

加入判断条件及判断变量:

 2 流程图画好之后就可以来发布部署一个流程了

测试代码如下:

@Test
    public void createDeploy() {
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("processes/leave.bpmn")
                //.addClasspathResource("processes/leave.bpmn.png")
                .name("请假申请流程")
                .deploy();
        System.out.println(deploy.getName());
        log.info("流程部署id:" + deploy.getName());
        log.info("流程部署名称:" + deploy.getId());
    }

主要操作的表如下:

 

 测试部署流程是会发现如下报错:

解决办法:

打开刚才画好的部署流程文件,删除下图中标记的代码:

 3 根据刚才部署好的流程来发布一个流程实例

其中的bussinessKey是我们关联的业务key,通过这个key可以和我们开启的一个流程实例id关联

  @Test
    public void startActivityDemo() {
        String bussinessKey = "123";
        String key = "leave_apply";
        ProcessInstance test = runtimeService.startProcessInstanceByKey(key, bussinessKey);
        System.out.println("流程id=" + test.getId());
        System.out.println("流程定义id:" + test.getProcessDefinitionId());

    }

主要操作的表如下:

4 根据用户名来查询该节点的所有代办任务

@Test
    public void getTaskList() {
        List<Task> student = taskService.createTaskQuery().taskAssignee("student").list();//根据用户名查询其所有的代办任务
        //List<Task> student = taskService.createTaskQuery().list();//查询经办人的所有代办任务
        for (Task t : student) {
            System.out.println("taskId:" + t.getId() + ",assignee" + t.getAssignee() + ",name" + t.getName());
        }
    }

5 根据任务id提交工作流任务

public void complete(String taskId, String message) {
        taskService.setVariableLocal(taskId, "studentMessage", message);
        taskService.complete(taskId);
    }

主要操作的表如下:

其中taskId为流程实例id,message为定义的流程判断条件

到此整个工作流基本流程已经完成(未完待续。。。)

posted @ 2020-07-16 18:56  雪碧要冰镇的  阅读(398)  评论(0)    收藏  举报