栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Activiti7的基础使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Activiti7的基础使用

文章目录
  • Activiti7的进阶使用
  • 1.idea安装插件
  • 2.Maven
  • 3.配置文件Xml(最好默认名称)
    • activiti.cfg.xml
    • log4j.properties
  • 4.创建数据库
    • 4.1 创建新的空数据库
    • 4.2 建表
      • 4.2.1 创建流程图
      • 4.2.2 创建表的两种方式
        • 单个流程的创建
        • 通过ZIP压缩包一次性创建多个流程
      • 4.3 Service总览
  • 5.简单测试使用
    • 5.1 启动流程实列(根据Key值来启动)
    • 5.2 任务查询 (根据流程定义的Key和负责人来进行查询)
    • 5.3 任务的完成
      • 5.3.1 执行第一次
      • 5.3.2 执行第二次

Activiti7的进阶使用
1.idea安装插件

1.1 Activiti BPMN visualizer

1.2 测试是否能正常使用

1.3 右键选择此BPMN.xml文件

1.4 成功

2.Maven
    
        17
        17
        7.1.0.M6
    

    
        
        
        
            org.activiti
            activiti-engine
            ${activiti.version}
        
        
            org.activiti
            activiti-spring
            ${activiti.version}
        

        
        
            org.activiti
            activiti-bpmn-model
            ${activiti.version}
        
        
        
            org.activiti
            activiti-bpmn-converter
            ${activiti.version}
        
        
        
            org.activiti
            activiti-json-converter
            ${activiti.version}
        
        
        
            org.activiti
            activiti-bpmn-layout
            ${activiti.version}
        

        
        
        
            org.activiti.cloud
            activiti-cloud-services-api
            7.0.0.Beta1
        

        
        
            mysql
            mysql-connector-java
            8.0.29
        

        
        
            org.mybatis
            mybatis
            3.5.10

        

        
        
            commons-dbcp
            commons-dbcp
            1.4
        

        
            junit
            junit
            4.13.2
        
        
        
            log4j
            log4j
            1.2.17
        
        
            org.slf4j
            slf4j-api
            1.7.36
        
        
            org.slf4j
            slf4j-log4j12
            1.7.36
        
        
            commons-io
            commons-io
            2.11.0
        
    
3.配置文件Xml(最好默认名称)

目录结构

activiti.cfg.xml




    
    
        
        
        
        
        
        
    


    
    
        
        
        
        
        
        
        
        
        
    

log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
#日志文件位置
log4j.appender.LOGFILE.File=D:\Test\java\Test1\activiti7\src\main\resources\log\activiti.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m
4.创建数据库 4.1 创建新的空数据库

根据 activiti.cfg.xml 文件中所连接的数据库名字创建一个新的空数据库

4.2 建表 4.2.1 创建流程图

此处流程图名会在数据库的 act-re-procdef 表中作为唯一Key标识

  1. 右键选择图标
  2. 选中图标修修改信息,如下

    修改Name等信息

  1. 点击图标,拖动右上角的箭头,将他们之间的关系连接起来
  2. 右键,save to PNG,将png文件保存下来方便日后查看
4.2.2 创建表的两种方式 单个流程的创建
    
    @Test
    public void testDeployment() {
        //1.创建 processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.使用RepositoryService进行部署,将bpmn文件和生成的png文件路径放入其中
        Deployment deploy = repositoryService.createDeployment().name("出差申请流程").addClasspathResource("bpmn/evection.bpmn20.xml").addClasspathResource("bpmn/evection.png").deploy();
        //4.输出部署信息
        System.out.println("流程部署ID=" + deploy.getId());
        System.out.println("流程部署名字=" + deploy.getName());
    }
通过ZIP压缩包一次性创建多个流程

目录结构

    
    @Test
    public void deployProcessByZip() {
        //获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //流程部署
        //读取资源包文件构造成inputStream
        InputStream inputStream = this.getClass()
                .getClassLoader()
                .getResourceAsStream("bpmn/evection.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        Deployment deploy = repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .deploy();
        System.out.println("流程部署ID" + deploy.getId());
        System.out.println("流程部署名称" + deploy.getName());
    }

可以看到 act-re-procdef 表中已经有了两个流程

ps1: 上面的是默认创建方式,activiti.cfg.xml文件名及路径固定,且activiti.cfg.xml文件中有 processEngineConfiguration的配置
.
ps2: 一般创建方式如下

//先构建ProcessEngineConfiguration
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();
4.3 Service总览

部署操作表
act-re-deployment 部署表
act-re-procdef 流程定义表
act-ge-bytearray 资源表

service名称service作用
RepositoryServiceactiviti的资源管理类
RuntimeServiceactiviti的流程运行管理类
TaskServiceactiviti的任务管理类
HistoryServiceactiviti的历史管理类
ManagerServiceactiviti的引擎管理类

简单介绍:
.
RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。

除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。

暂停或激活发布包,对应全部和特定流程定义。
暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。

获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

.
RuntimeService

Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
.
TaskService

Activiti的任务管理类。可以从这个类中获取任务的信息。
.
HistoryService

Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者,
完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
.
ManagementService

Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于
Activiti 系统的日常维护。

5.简单测试使用

5.1 启动流程实列(根据Key值来启动)

核心
ProcessInstance instance = runtimeService.startProcessInstanceByKey("Test2");

    
    @Test
    public void testStartProcess() {
        //1.创建 processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.获取runTimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //3.根据流程定义 Key 的启动流程
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("Test2");
        //4.输出内容
        System.out.println("流程定义ID=" + instance.getProcessDefinitionId());
        System.out.println("流程实列ID=" + instance.getId());
        System.out.println("当前活动的ID=" + instance.getActivityId());
    }

5.2 任务查询 (根据流程定义的Key和负责人来进行查询)

核心 (taskAssignee是画图的时候Assignee所填写的内容,正常为负责人名称)
taskService.createTaskQuery() .processDefinitionKey("Test2") .taskAssignee("第一个节点") .list();

    
    @Test
    public void testFindPersonalTaskList() {
        //1、获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2、获取taskService
        TaskService taskService = processEngine.getTaskService();
        //3、根据流程key 和 任务的负责人 查询任务
        List list = taskService.createTaskQuery()
                .processDefinitionKey("Test2")
                .taskAssignee("第一个节点")
                .list();
        //4、输出
        for (Task task : list) {
            System.out.println("流程定义ID=" + task.getProcessInstanceId());
            System.out.println("任务ID=" + task.getId());
            System.out.println("任务负责人=" + task.getAssignee());
            System.out.println("任务名称=" + task.getName());
        }
    }


5.3 任务的完成

核心 (使用TaskService,用任务ID来完成,任务id见上方 task.getId() )
taskService.complete("2505");

流程图

表 act_ru_task
任务第一步执行之前(启动流程实例)

5.3.1 执行第一次
    
    @Test
    public void completTask() {
        //获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取操作任务的服务 TaskService
        TaskService taskService = processEngine.getTaskService();
        //完成任务,参数:任务id,完成 >第一个节点< 的任务
        taskService.complete("2505");
	}

任务第一步执行之后,第二步执行之前

5.3.2 执行第二次

通过任务查询 createTaskQuery 获取 ( 任务查询 createTaskQuery)

    
    @Test
    public void completTask() {
        //获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取操作任务的服务 TaskService
        TaskService taskService = processEngine.getTaskService();
		//获取 Test2 - 第一个节点 对应的任务
        Task task = taskService.createTaskQuery()
                .processDefinitionKey("Test2")
                .taskAssignee("第二个节点")
                .singleResult();
        //完成 >第二个节点< 的任务
        taskService.complete(task.getId());
     }

任务第二步执行之后,因为流程结束,所以此表删除这个任务实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号