第一节:实现Activiti6.0的第一个demo

1,411 阅读2分钟

一、搭建项目架构

  1. 使用idea需要安装actiBPM插件用来画流程图
  2. 创建一个空的java项目,并添加文件夹如下:
    项目包
    lib:存放需要使用的jar包,可从下面链接直接下载解压,记得加入将包加入项目中,如下: jar包提取码:c0zq
    在这里插入图片描述
    resource:存放资源文件,比如bpmn流程文件等
  3. 新建一个流程first.bpmn
    流程
  4. 添加log4j.properties文件,配置日志
log4j.rootLogger=INFO, stdout

# Console Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n

# Custom tweaks
log4j.logger.com.codahale.metrics=WARN
log4j.logger.com.ryantenney=WARN
log4j.logger.com.zaxxer=WARN
log4j.logger.org.apache=WARN
log4j.logger.org.hibernate=WARN
log4j.logger.org.hibernate.engine.internal=WARN
log4j.logger.org.hibernate.validator=WARN
log4j.logger.org.springframework=WARN
log4j.logger.org.springframework.web=WARN
log4j.logger.org.springframework.security=WARN
  1. 引入activiti的配置文件activiti.cfg.xml 可从官网复制:activiti.cfg.xml 修改如下:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

	    <!--如果mysql是8.0,需要自己引用对应的mysql-connector-java-8.0.16.jar,并在连接上加上时区如下-->
        <!--<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?serverTimezone=UTC" />-->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" />
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="123456" />

        <property name="databaseSchemaUpdate" value="true" />

        <!--以下注释掉-->
<!--        <property name="asyncExecutorActivate" value="false" />-->

<!--        <property name="mailServerHost" value="mail.my-corp.com" />-->
<!--        <property name="mailServerPort" value="5025" />-->
    </bean>

</beans>
  1. 创建对应的数据库
    数据库

二、编码

  1. 在src对应目录下创建类:ActivitiTest,编码如下
package com.xjf.c3;

/*注意导入activiti6.0的包*/
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

/**
 * @Auther: XuJiaFei
 * @Date: 2019/11/8 09:49
 * @Description:
 */
public class ActivitiTest {

    public static void main(String[] args) {
        //获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //存储服务
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //运行服务
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //任务服务
        TaskService taskService = processEngine.getTaskService();

        //发布流程
        repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();

        //创建一个请假流程,获取流程实例。此处的流程id为first.bpmn的process的id
        ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess_1");

        //员工完成请假的任务
        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
        System.out.println("当前流程节点:" + task.getName());
        taskService.complete(task.getId());

        //经理完成审批任务
        task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
        System.out.println("当前流程节点:" + task.getName());
        taskService.complete(task.getId());

        //流程执行完了,再去获取任务会为null
        task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
        System.out.println("流程执行结束了:" + task);

        //关闭引擎
        processEngine.close();
        //退出
        System.exit(0);

    }
}

注意

  1. runtimeService.startProcessInstanceByKey("myProcess_1")对应的key,是first.bpmn中的,在idea中将first.bpmn重命名为first.xml,能看到对应的xml

    first.xml
    千万注意将process后面的 xmlns=" " 去掉,不然会启动失败

  2. 运行后数据库会生成28张表

    28张表

三、结果

结果
该流程模拟实现了员工进行请假,然后经理进行审批的流程。