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

一、搭建项目架构

  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
    
  5. 引入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?characterEncoding=utf-8&amp;useUnicode=true&amp;useSSL=true" />
            <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>
    
  6. 创建对应的数据库
    数据库

二、解决IDEA中Activiti的中文乱码

  1. 进入idea的安装目录
    在这里插入图片描述
  2. 打开这两个文件,在最后面添加一行
    -Dfile.encoding=UTF-8
    
  3. 重启IDEA即可。

三、编码

  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张表

四、结果

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值