Activiti7学习笔记———activiti基本介绍及使用

activiti7(三):Activiti7简介与HelloWorld activiti7简介与helloworld,旨在学习activiti7的工作流程和原理 阅读详情
AI摘要

本文详细介绍了Activiti工作流引擎的安装配置,包括IDEA插件安装、Maven工程依赖设置、数据库表自动部署以及日志配置。此外,还讲解了流程定义的创建、部署与执行,包括流程符号、流程历史记录表的意义,以及如何通过Idea插件绘制并部署执行流程。最后,展示了如何查询流程历史信息、下载流程资源以及删除流程的操作步骤。

一、Activiti使用环境

1、idea actiBPM插件的安装

方式一
通过idea搜索actiBPM来安装插件
在这里插入图片描述
方式二
通过去官网查找actiBPM插件将插件下载下来通过如图所示的方式安装插件
在这里插入图片描述

2、Activiti所需环境部署

1)创建maven工程,在pom.xml文件中添加activiti所需的各种jar包

  1. activiti-engine-7.0.0.beta1.jar

  2. activiti 依赖的 jar 包: mybatis、 alf4j、 log4j 等

  3. activiti 依赖的 spring 包

  4. mysql数据库驱动(数据库驱动可以更具自己所需而变动,详细参照activiti支持的数据库)

  5. 第三方数据连接池 dbcp

  6. 单元测试 Junit-4.12.jar(为了测试使用activiti)

<properties>
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
    <activiti.version>7.0.0.Beta1</activiti.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-engine</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- bpmn 模型处理 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-model</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- bpmn 转换 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- bpmn json数据转换 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-json-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- bpmn 布局 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-layout</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- activiti 云支持 -->
    <dependency>
        <groupId>org.activiti.cloud</groupId>
        <artifactId>activiti-cloud-services-api</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.40</version>
    </dependency>
    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    <!-- 链接池 -->
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!-- log start -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
</dependencies>

2)在resources文件夹下创建日志文件以及activiti所需配置文件

activiti.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 默认id对应的值 为processEngineConfiguration -->
    <!-- processEngine Activiti的流程引擎 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///activititest?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="123456"/>
        <!-- activiti数据库表处理策略 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
    <!-- 这里可以使用 链接池 dbcp-->
<!--    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">-->
<!--        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />-->
<!--        <property name="url" value="jdbc:mysql:///activititest" />-->
<!--        <property name="username" value="root" />-->
<!--        <property name="password" value="123456" />-->
<!--        <property name="maxActive" value="3" />-->
<!--        <property name="maxIdle" value="1" />-->
<!--    </bean>-->
<!--    <bean id="processEngineConfiguration"-->
<!--          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">-->
<!--        &lt;!&ndash; 引用数据源 上面已经设置好了&ndash;&gt;-->
<!--        <property name="dataSource" ref="dataSource" />-->
<!--        &lt;!&ndash; activiti数据库表处理策略 &ndash;&gt;-->
<!--        <property name="databaseSchemaUpdate" value="true"/>-->
<!--    </bean>-->
</beans>

日志文件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\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=f:\act\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\n

3、Activiti数据库表的自动部署

执行以下代码activiti回自动帮助你创建用于控制工作流的表。共计25张.

    /**
     * 生成 activiti的数据库表
     */
    @Test
    public void testCreateDbTable() {
        //使用classpath下的activiti.cfg.xml中的配置创建processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    }

在这里插入图片描述

二、Activiti各表的意义

表分类表名解释
一般数据
[ACT_GE_BYTEARRAY]通用的流程定义和流程资源
[ACT_GE_PROPERTY]系统相关属性
流程历史记录
[ACT_HI_ACTINST]历史的流程实例
[ACT_HI_ATTACHMENT]历史的流程附件
[ACT_HI_COMMENT]历史的说明性信息
[ACT_HI_DETAIL]历史的流程运行中的细节信息
[ACT_HI_IDENTITYLINK]历史的流程运行过程中用户关系
[ACT_HI_PROCINST]历史的流程实例
[ACT_HI_TASKINST]历史的任务实例
[ACT_HI_VARINST]历史的流程运行中的变量信息
流程定义表
[ACT_RE_DEPLOYMENT]部署单元信息
[ACT_RE_MODEL]模型信息
[ACT_RE_PROCDEF]已部署的流程定义
运行实例表
[ACT_RU_EVENT_SUBSCR]运行时事件
[ACT_RU_EXECUTION]运行时流程执行实例
[ACT_RU_IDENTITYLINK]运行时用户关系信息,存储任务节点与参与者的相关信息
[ACT_RU_JOB]运行时作业
[ACT_RU_TASK]运行时任务
[ACT_RU_VARIABLE]运行时变量表

三、activiti的流程符号

BPMN 2.0是业务流程建模符号2.0的缩写。
在这里插入图片描述
参考

四、通过使用Idea插件绘制并部署执行流程。

1、绘制bpmn

1)创建bpmn文件,并通过插件绘制bpmn流程图(可转为xml文件以及png文件)。
在这里插入图片描述
点开bpmn文件如下图

![
在这里插入图片描述](https://img-blog.csdnimg.cn/20210605161837578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hZ2ljcHJvYmxlbQ==,size_16,color_FFFFFF,t_70)

简单的绘制工作流,如下图所示
在这里插入图片描述
2)将文件的扩展名改为.xml则如下所示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/testm1622878134337" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1622878134337" name="" targetNamespace="http://www.activiti.org/testm1622878134337" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="myFlow01" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="start1" name="StartEvent"/>
    <userTask activiti:assignee="操作员01" activiti:candidateUsers="候选人01" activiti:exclusive="true" id="flow01" name="发送请假申请"/>
    <userTask activiti:assignee="操作员02" activiti:candidateUsers="候选人02" activiti:exclusive="true" id="flow02" name="主管审批"/>
    <endEvent id="end1" name="EndEvent"/>
    <sequenceFlow id="_6" sourceRef="start1" targetRef="flow01"/>
    <sequenceFlow id="_7" sourceRef="flow01" targetRef="flow02"/>
    <sequenceFlow id="_8" sourceRef="flow02" targetRef="end1"/>
  </process>
  <bpmndi:BPMNDiagram documentation="background=#FFFFFF;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
    <bpmndi:BPMNPlane bpmnElement="myFlow01">
      <bpmndi:BPMNShape bpmnElement="start1" id="Shape-start1">
        <dc:Bounds height="32.0" width="32.0" x="310.0" y="85.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="flow01" id="Shape-flow01">
        <dc:Bounds height="55.0" width="85.0" x="285.0" y="165.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="flow02" id="Shape-flow02">
        <dc:Bounds height="55.0" width="85.0" x="285.0" y="260.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end1" id="Shape-end1">
        <dc:Bounds height="32.0" width="32.0" x="310.0" y="360.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="_6" id="BPMNEdge__6" sourceElement="_2" targetElement="_3">
        <di:waypoint x="326.0" y="117.0"/>
        <di:waypoint x="326.0" y="165.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_3" targetElement="_4">
        <di:waypoint x="327.5" y="220.0"/>
        <di:waypoint x="327.5" y="260.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_4" targetElement="_5">
        <di:waypoint x="326.0" y="315.0"/>
        <di:waypoint x="326.0" y="360.0"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

3)转为图片则需先转为xml文件,通过如图以下操作即可转为图片,如果没有Diagrams可参考idea actiBPM插件生成png文件 (解决没有Diagrams或Designer选项问题)
在这里插入图片描述
在这里插入图片描述

2、执行工作流程

1)部署流程定义

    /**
     * 部署流程定义
     */
    @Test
    public void testDeployment(){
//        1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        3、使用RepositoryService进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmn/myFlow01.bpmn") // 添加bpmn资源
                .addClasspathResource("bpmn/myFlow01.xml")  // 添加xml资源
                .addClasspathResource("bpmn/myFlow01.png")  // 添加png资源
                .name("请假申请流程01")
                .deploy();
//        4、输出部署信息
        System.out.println("流程部署id:" + deployment.getId());
        System.out.println("流程部署名称:" + deployment.getName());
    }

执行结果
在这里插入图片描述
数据库表变动
流程定义部署后操作activiti的3张表如下:

act_re_deployment 流程定义部署表,每部署一次增加一条记录
在这里插入图片描述

act_re_procdef 流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
在这里插入图片描述

act_ge_bytearray 流程资源表
在这里插入图片描述
2)启动流程实例

    /**
     * 启动流程实例
     */
    @Test
    public void testStartProcess(){
//        1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、获取RunTimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
//        3、根据流程定义Id启动流程
        ProcessInstance processInstance = runtimeService
                .startProcessInstanceByKey("myFlow01");
//        输出内容
        System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
        System.out.println("流程实例id:" + processInstance.getId());
        System.out.println("当前活动Id:" + processInstance.getActivityId());
    }

运行结果
在这里插入图片描述
数据库表变动
act_hi_actinst 流程实例执行历史
在这里插入图片描述

act_hi_identitylink 流程的参与用户历史信息
在这里插入图片描述

act_hi_procinst 流程实例历史信息
在这里插入图片描述

act_hi_taskinst 流程任务历史信息
在这里插入图片描述

act_ru_execution 流程执行信息
在这里插入图片描述

act_ru_identitylink 流程的参与用户信息
在这里插入图片描述

act_ru_task 任务信息
在这里插入图片描述
3)完成任务

    /**
     * 完成个人任务
     */
    @Test
    public void completeTask(){
        String ass = "操作员01";

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        TaskService taskService = processEngine.getTaskService();
        //查询该用户是否有该任务
        Task task = taskService.createTaskQuery().taskAssignee(ass).singleResult();
        //将查询个人任务完成act_ru_task,完成后会将历史记录存在hi表中,当前任务会变成下一个阶段的任务
        if (task == null){
            System.out.println(ass+"没有任务");
        }else
            System.out.println(ass+"完成任务"+task.getName()+"--"+task.getId());
            taskService.complete(task.getId());
    }

运行结果
在这里插入图片描述
数据库变动基本与启动流程实例一致以act_hi的表新增当前流程记录,以及修改上一步流程的结束时间,而act_ru的都变为当前这个流程阶段的信息如图所示。
act_ru_task 任务信息
在这里插入图片描述
act_hi_actinst 流程实例执行历史
在这里插入图片描述
4)删除流程

    /**
     * 删除流程
     * 1、删除流程定义,如果该流程定义已有流程实例启动则删除时出错(未完成该流程)
     * 2、设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除(未完成的流程实例被删除)
     * act_hi的表是不会被删除的
     * 主要是删除act_ru以及部署时操作的那几张表的相关信息
     */
    @Test
    public void deleteDeployment() {
        // 流程部署id
        String deploymentId = "12501";

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 通过流程引擎获取repositoryService
        RepositoryService repositoryService = processEngine
                .getRepositoryService();
        //
        repositoryService.deleteDeployment(deploymentId);
        //设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除
        //repositoryService.deleteDeployment(deploymentId, true);
    }

运行结果
结果1(使用repositoryService.deleteDeployment(deploymentId);):
在这里插入图片描述
结果2(使用repositoryService.deleteDeployment(deploymentId, true);):
在这里插入图片描述
数据库表变动:
act_re_deployment
在这里插入图片描述

act_re_procdef
在这里插入图片描述

act_ge_bytearray

在这里插入图片描述
使用repositoryService.deleteDeployment(deploymentId);,在有流程实例未完成的状态下act_ru等表中相关数据被删,act_hi的流程完成记录还在
使用repositoryService.deleteDeployment(deploymentId, true);,则关联的信息全部被删,包括act_hi

act_ru_task
在这里插入图片描述
act_ru_identitylink
在这里插入图片描述
等等act_ru以及act_hi表

5)流程历史信息的查询

    /**
     * 查看历史信息
     */
    @Test
    public void findHistoryInfo(){
//      获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取HistoryService
        HistoryService historyService = processEngine.getHistoryService();
//        获取 actinst表的查询对象
        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
//        查询 actinst表,条件:根据 InstanceId 查询
//        instanceQuery.processInstanceId("2501");
//        查询 actinst表,条件:根据 DefinitionId 查询
        instanceQuery.processDefinitionId("12501");
//        增加排序操作,orderByHistoricActivityInstanceStartTime 根据开始时间排序 asc 升序
        instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
//        查询所有内容
        List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();
//        输出
        for (HistoricActivityInstance hi : activityInstanceList) {
            System.out.println(hi.getActivityId());
            System.out.println(hi.getActivityName());
            System.out.println(hi.getProcessDefinitionId());
            System.out.println(hi.getProcessInstanceId());
            System.out.println("<==========================>");
        }
    }

6)流程资源的下载
需要引入commons-io的jar包

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
    /**
     * 流程资源的下载
     * @throws IOException
     */
    @Test
    public void  queryBpmnFile() throws IOException {
//        1、得到引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        3、得到查询器:ProcessDefinitionQuery,设置查询条件,得到想要的流程定义
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myFlow01")
                .singleResult();
//        4、通过流程定义信息,得到部署ID
        String deploymentId = processDefinition.getDeploymentId();
//        5、通过repositoryService的方法,实现读取图片信息和bpmn信息
//        png图片的流
        InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
//        bpmn文件的流
        InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
//        6、构造OutputStream流
        File file_png = new File("d:/flow01.png");
        File file_bpmn = new File("d:/flow01.bpmn");
        FileOutputStream bpmnOut = new FileOutputStream(file_bpmn);
        FileOutputStream pngOut = new FileOutputStream(file_png);
//        7、输入流,输出流的转换
        IOUtils.copy(pngInput,pngOut);
        IOUtils.copy(bpmnInput,bpmnOut);
//        8、关闭流
        pngOut.close();
        bpmnOut.close();
        pngInput.close();
        bpmnInput.close();
    }

运行结果
在这里插入图片描述
在这里插入图片描述

Activiti7学习笔记、非常详细 | 进阶篇 嘻嘻哈哈学技术 阅读详情

相关推荐

2023最新版本Activiti7系列-Activiti7概述和入门案例

Activiti7全新工作流讲解

波波烤鸭的博客 4853

Activiti7工作流引擎:基础篇(一) 简介与IDEA插件安装

一:工作流WorkFlow 1.1 框架的特性 框架一般是针对于特定功能的一种高度抽象封装的实现,例如SpringSecurity专门用于处理权限的。 框架完全实现了核心逻辑,开发者只需要提供框架所需的数据即可,例如SpringSecurity权限框架已经实现,开发者只需要提供用户以及用户对应的权限相关信息即可。 框架一般功能强大,扩展性强,代码规范。 1.2 工作流框架 Activiti7(https://www.activiti.org)就是一种框架,它有个高大上的名字叫工作流引擎,它的使用场景是用

人不风流枉少年 9867

狂神说docker(最全笔记)

一.Docker入门 1. Docker 为什么会出现 2. Docker的历史 3.Docker最新超详细版教程通俗易懂 Docker是基于Go语言开发的!开源项目 官网 官方文档Docker文档是超详细的 仓库地址 4. 虚拟化技术和容器化技术对比 4.1. 虚拟化技术的缺点 资源占用十分多 冗余步骤多 启动很慢 2.2. 容器化技术 比较Docker和虚拟化技术的不同 传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软.

qq_21197507的博客 5万+

2021全网最全Activiti7教程01(Activiti7详细介绍-欢迎收藏)

  最近有录制一套Activiti的详细教程,正好给大家通过博客的形式给大家梳理下Activiti的相关内容。 Activiti详细介绍 1 介绍 ​ Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。 ​ Activiti是一个工作流引擎, activiti可以

波波烤鸭的博客 6982

Ollama+FAISS+Embedding+Rerank+LLM 详细部署指南

下载安装Ollama 双击运行安装程序 安装完成后会自动启动服务 修改默认安装路径(避免C盘爆满) 或使用PowerShell: 验证安装 Linux系统部署: (二)准备模型 1. 拉取Embedding模型 2. 拉取LLM模型 注意:原文中提到的可能需要从自定义仓库拉取: 3. 下载Rerank模型 (三)安装依赖库 创建项目目录和虚拟环境: 二、主要功能实现 项目结构 (一)配置文件(config/config.yaml) (二)文本分块策略实现 创建 : (三)文档读取

AI技术改变世界 1582

Crazyflie 2.1固件刷写与地址配置全攻略:从开箱到连接Crazyswarm

本文详细介绍了Crazyflie 2.1微型无人机的固件刷写、地址配置及与Crazyswarm系统的集成方法。从开箱检查到多机协同飞行,涵盖了硬件准备、固件刷写、无线电地址修改等关键步骤,帮助用户快速实现集群飞行控制。特别针对Crazyswarm系统集成提供了实用配置示例和调试技巧。

weixin_42530458的博客 405

Activiti7工作流 学习笔记

是一种按照预定义规则【需要符合BPMN规范】进行部署,将业务和节点的流程进行分离【特定形式进行关联】,实现节点的自动流转的工作流框架.1.需要将预定于的流程文件BPMN部署到工作流引擎中,会把节点,路径信息存储到数据库中.2.工作流引擎提供了大量的API对流程进行查询处理,细节都是对应用程序屏蔽的,大大提供开发效率3.业务逻辑的处理和流程的流转是分离的,是通过BusinessKey进行关联的.

weixin_46853502的博客 1078

Ubuntu22.04上如何用Docker一键部署Ragflow+Ollama(附CUDA配置避坑指南)

本文详细介绍了在Ubuntu22.04系统上使用Docker一键部署Ragflow+Ollama的完整流程,特别提供了CUDA配置的避坑指南。从硬件兼容性检查、驱动安装到容器网络配置,手把手教你搭建本地化大模型环境,解决CUDA驱动冲突等常见问题,助力开发者快速构建AI应用开发平台。

weixin_26875109的博客 285

[JavaEE] 工作流- Activiti7 框架学习笔记

[JavaEE] 工作流- Activiti7 框架学习笔记

weixin_60504987的博客 194

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6105

基于深度学习的水果新鲜程度检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

本文详细介绍了如何使用YOLO系列模型(YOLOv5、YOLOv6、YOLOv7、YOLOv8)构建水果新鲜度检测系统。通过数据集准备、模型训练、推理过程以及UI界面的实现,我们能够构建一个实时检测水果新鲜度的系统。通过本博客,您可以全面了解如何应用深度学习技术解决实际问题,尤其是在智能监控和食品质量检测领域。

YOLO 815

Activiti7学习笔记

Alfresco 软件在 2010 年 5 月 17 日宣布 Activiti 业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理 BPM 的专家 Tom Baeyens 担任,Tom Baeyens 就是原来 jbpm 的架构师,而 jbpm 是一个非常有名的工作流引擎,当然 activiti 也是一个工作流引擎。Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的。

wsb_2526的博客 910

sam3.1 部署笔记 推理封装

sam3.1 部署笔记

jacke121的专栏 424

学习笔记 | Activiti7

Activiti7的基本知识(六大service、bpmn、基本使用),SpringBoot整合Activiti7

suweijie的博客 1221

【知识点讲解】大模型参数量与计算量(FLOPs)估算方法

指标参数量 (Params)计算量 (FLOPs)含义模型的大小,静态模型的计算复杂度,动态决定因素模型结构(宽度、深度)模型结构 +输入数据(B, S)影响内存占用、磁盘空间运行速度、能耗单位M (百万), B (十亿)工具thopptflopstorchinfothopptflopsfvcore重要提示FLOPs ≠ 速度:FLOPs 是理论计算量。实际速度还受内存带宽 (Memory Bandwidth)并行度硬件架构等因素严重影响。

AI浩 2098

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Activiti7学习笔记———activiti进阶

一、流程实例 1、通过Businesskey关联业务 /** * 启动流程实例,添加businessKey */ @Test public void addBusinessKey(){ // 1、得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 2、得到RunTimeService

magicproblem的博客 775

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Activiti7学习笔记、非常详细 | 基础篇

嘻嘻哈哈学技术

嘻嘻哈哈学技术 2011

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

activiti7 和业务_Activiti7 学习笔记(一)

Activiti7是一个工作流引擎何为工作流?工作的一个流程,事务发展的一个业务过程。如请假流程:员工申请----部门主管审批----总经理审批----归档录入在计算机的帮助下,能够实现实现流程的自动化控制,就称为工作流。何为工作流引擎?实现流程的自动化的引擎。Activiti7的特点:在业务流程变更之后,不需要改动源代码,仅需更新业务流程图。Activiti7内部的实现机制:核心思想:将流程图画...

weixin_39685762的博客 337

01_activiti7 学习笔记

最近公司涉及到OA系统,使用activiti 来实现,研究了一些activiti做的笔记[持续更新中…],研究完之后提供xmind笔记,

KevinLoveJava 281

Activiti7工作流学习笔记一 流程定义

Activiti工作流学习笔记一 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中...

水滴的专栏 1043

Activiti7工作流学习笔记二 流程实例

Activiti7工作流学习笔记二 流程实例 参与者(可以是用户也可以是程序)按照流程定义内容发起一个流程,这就是一个流程实例。是动态的。 流程定义和流程实例的图解: 流程定义部署在 activiti 后,就可以在系统中通过 activiti 去管理该流程的执行,执行流程表示流程的一次执行。 比如部署系统请假流程后,如果某用户要申请请假这时就需要执行这个流程,如果另外一个用户也要申请请假则也需...

水滴的专栏 912

学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

Activiti7 1.1工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标, 或者促使此目标的实现。 2.1Activiti 介绍 BPM 介绍 Alfresco 软件在 2010 年 5 月 17 日宣布 Activiti 业务流程管理(BPM)开源项目的正式启动,其 首席架构师由业务流程管理 BPM 的专家 Tom Baeyens 担任,Tom Baeye

fushuai优快云的博客 4836

Activiti学习笔记7 — ReceiveTask机器自动任务的使用

一、 创建流程规则,如下图 二、发布流程 1 /** 2 * 2、发布一个流程 3 */ 4 @Test 5 public void testDeployProcess() { 6 RepositoryService repositoryService = processEngine.ge...

446

Activiti7工作流学习笔记三 流程变量

流程变量 流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti结合时少不了流程变量,流程变量就是 activiti在管理工作流时根据管理需要而设置的变量。 比如在请假流程流转时如果请假天数大于 3 天则由总经理审核,否则由人事直接审核,请假天数就可以设置为流程变量,在流程流转时使用。 注意:虽然流程变量中可以存储业务数据可以通过 activ...

水滴的专栏 1642
上一篇: 装饰者模式
下一篇: Activiti7学习笔记———activiti进阶
magicproblem
博客等级 码龄7年 22粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值