ruoyi-nbcio-plus基于多租户的flowable设计考虑

news2024/11/26 2:35:06

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址: http://122.227.135.243:9666

更多nbcio-boot功能请看演示系统

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://122.227.135.243:9888

一、基于数据库的考虑

还是建议使用flowable的多租户字段tenantId,本身系统支持多租户的方式

如流程历史实例表act_hi_procinst

流程执行表act_ru_execution

还有其它各类表

二、各类流程相关接口修改

        多租户是指一个软件为多个不同组织提供服务。其核心是数据隔离,一个组织不能看到其他组织的数据。在这个语境中,一个这样的组织(或部门、团队,等等)被称为一个租户(tenant

        Flowable中的多租户主要围绕着隔离数据实现。要注意Flowable并不强制多租户规则。换句话说,查询与使用数据时,不会验证进行操作的用户是否属于正确的租户。这应该在调用Flowable引擎的层次实现。Flowable负责确保可以存储租户信息,并可在获取流程数据时使用。

        在Flowable流程引擎中部署流程定义时,可以传递一个租户标识符(tenant identifier)。这是一个字符串(可以是UUID,部门id,等等……),限制为256个字符长,唯一标识一个租户:

 

    // 部署流程

    Deployment deployment = repositoryService.createDeployment()

            .name(model.getName())

            .key(model.getKey())

            .category(model.getCategory())

            .tenantId(tenantId)

            .addBytes(processName, bpmnBytes)

            .deploy();

        部署中包含的所有流程定义都将从该部署继承租户标识符。在部署时传入一个租户ID意味着:

从这些流程定义启动的所有流程实例都将从流程定义继承租户标识符。

// 发起流程实例

      ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId(procDef.getId(), variables, tenantId)

      在执行流程实例时,创建所有任务都将从流程实例继承租户标识符。独立任务也可以有租户标识符。

     执行流程实例时,创建的所有执行都将从流程实例继承租户标识符。

(在流程内或通过API)触发信号抛出事件时可以提供租户标识符。这个信号将只在该租户的上下文中执行。也就是说,如果有多个使用相同名字的信号捕获事件,只会触发带有正确租户标识符的捕获事件。

所有作业(定时器与异步操作)要么从流程定义(如定时器启动事件),要么从流程实例(运行时创建的作业,如异步操作)继承租户标识符。这样就可以在自定义作业执行器中,为租户设置优先级。

所有历史实体(历史流程实例、任务与活动)都从其对应的运行时对象继承租户标识符。

另外,模型也可以有租户标识符(模型用于Flowable Modeler存储BPMN 2.0)。

所有查询API都可以通过租户标识符进行过滤。例如(也可以换成其他实体的查询):

    ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceTenantId(tenantId)

    .processInstanceId(bo.getProcInsId()).singleResult();

      查询API也可以使用like语义通过租户标识符过滤,也可以过滤掉没有租户标识符的实体。

      重要的实现细节:由于数据库的原因(更确切地说,对唯一约束中null的处理),默认的代表没有租户的租户标识符为空字符串。这是因为(流程定义key,流程定义版本,租户标识符)的组合需要是唯一的(由数据库约束保证)。也请注意租户标识符不能设置为null,不然会影响查询,因为某些数据库会将空字符串当做null值处理(这也就是为什么.withoutTenantId查询不检查空字符串还是null)。所以可以为多个租户部署(有相同的流程定义key的)同一个流程定义,并且每一个租户都有他们自己的版本。不影响未使用租户时的使用方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日学习总结20240306

每日总结 20240306 1. 断言测试判断 #include <iostream> #include <assert.h> #include <cassert> #include <stdio.h>#define STR_OK "[\x1b[1;32m OK \x1b[0m]" #define STR_FAIL "[\x1b[1;31mFAIL\x1b[0m]"…

CTP-API开发系列之柜台系统简介

CTP-API开发系列之柜台系统简介 CTP-API开发系列之柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之柜台系统简介 中国金融市场结构—交易所 我们知道提…

4.2 比多数opencv函数效果更好的二值化(python)

在这里之间写代码&#xff1a; import numpy as np import torch import torch.nn as nn import cv2#1.silu激活函数 class SiLU(nn.Module):staticmethoddef forward(x):return x*torch.sigmoid(x)#2.获得轨道的类 def railway_classes3(img,x1,x2,y1,y2):img2 img[x1:x2, y…

【Flink入门修炼】2-2 Flink State 状态

什么是状态&#xff1f;状态有什么作用&#xff1f;如果你来设计&#xff0c;对于一个流式服务&#xff0c;如何根据不断输入的数据计算呢&#xff1f;又如何做故障恢复呢&#xff1f; 一、为什么要管理状态 流计算不像批计算&#xff0c;数据是持续流入的&#xff0c;而不是…

iOS小技能:苹果开发者申请材料

文章目录 引言I 个人账号申请资料II 公司账号申请所需资料III duns资料提交操作步骤IV 续费引言 https://developer.apple.com/cn/programs/enroll/ 申请过程只能使用同一台设备注册苹果开发者的Apple ID可以转让。注册苹果开发者的在验证身份证信息的时候,必须使用法定姓名拼…

STM32(18)I2C

串口通信缺点 一个设备就需要一个串口&#xff0c;单片机可能没有那么多串口外设 总线/非总线 主机&#xff1a;负责管理总线&#xff0c;可控制波特率、数据的通信方向 波特率&#xff1a;由主机产生波特率信号 数据的传输 每个从机都有7位地址&#xff0c;最后移位是读&a…

3.6IO作业

编写一个伪终端 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <wait.h> void getstring(char* buf,int si…

STM32CubeMX学习笔记12 ---低功耗模式

在实际使用中很多产品都需要考虑低功耗的问题&#xff0c;STM32F10X提供了三种低功耗模式&#xff1a;睡眠模式&#xff08;Sleep mode&#xff09;、停机模式&#xff08;Stop mode&#xff09;和待机模式&#xff08;Standby mode&#xff09;。这些低功耗模式可以有效减少系…

浅谈电子商务企业跨境电商经常要用到的电商API接口接入说明和参数解析

开发电商平台就一定离不开接口&#xff0c;作为产品经理&#xff0c;我们要对接口不要求能实现调用。但要知道接口是什么&#xff0c;有什么用&#xff0c;有哪些要素。 什么是API吗&#xff1f; API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口…

Linux上轻松搞定Docker环境下Nginx安装

Nginx安装 下载Nginx1.10的docker镜像&#xff1a; docker pull nginx:1.10先运行一次容器&#xff08;为了拷贝配置文件&#xff09;&#xff1a; docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -d…

5. 链接和加载(linker and loader)

链接和加载(linker and loader)&#xff1a; linker即链接器&#xff0c;它负责将多个.c编译生成的.o文件&#xff0c;链接成一个可执行文件或者是库文件&#xff1b; loader即加载器&#xff0c;它原本的功能很单一只是将可执行文件的段拷贝到编译确定的内存地址即可&#x…

数据库:创建员工表,实现对员工的管理(增、删、改、查)

#include <myhead.h> int do_add(sqlite3 *ppdb) {int numb;char name[20];double salary;printf("请输入员工信息&#xff1a;numb name salary\n");printf("请输入工号>>>");scanf("%d",&numb);printf("请输入员工姓名…

技术型项目经理和管理型项目经理有何区别?

在项目管理领域中&#xff0c;项目管理岗位涵盖了两种不同职责的角色&#xff0c;即技术型项目经理和管理型项目经理。这两个角色在职责、技能和关注点上存在一定的差异。 技术型项目经理 技术型项目经理通常具备广泛的专业知识和技术背景&#xff0c;他们关注项目的具体技术实…

Win11 24H2什么时候发布-你期待哪些新功能?

Win11 24H2什么时候发布&#xff1f;Win11 24H2的发布日期终于有了确切的消息。微软官方已宣布&#xff0c;这款备受期待的重要更新将在2024年下半年与大家见面。24H2版本的推出无疑将为广大用户带来更加流畅、安全和易用的操作系统体验。接下来跟随小编去看看这个新版本带来哪…

Android使用OpenGL和FreeType绘制文字

Open GL主要是渲染图形的&#xff0c;有时候需要绘制文字&#xff0c;网上搜了一下&#xff0c;基本思路都是把文字转成位图&#xff0c;再使用Open GL纹理进行渲染。加载纹理在特定阶段才能成功&#xff08;在onSurfaceCreated中加载&#xff09;&#xff0c;这样就无法动态的…

Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)

接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。 一:最终效果 首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效 二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的…

【JavaScript】Map、Reduce 和 Filter - 通过代码示例解释 JS 数组函数

Map、reduce 和 filter 都是 JavaScript 中的数组方法。每个都将迭代一个数组并执行转换或计算。每个函数都会根据函数的结果返回一个新数组。在本文中&#xff0c;您将了解为什么以及如何使用每一个。 以下是 Steven Luscher 的有趣总结&#xff1a; Map map()方法用于从现…

抖音开店实操步骤,图文详解!

大家好&#xff0c;我是电商糖果 话不多说&#xff0c;最近准备在抖音开店的朋友&#xff0c;这份图文开店笔记&#xff0c;记得收藏&#xff01; 一、开店前的准备 1. 营业执照 执照最好选个体的&#xff0c;个体执照可以直接去工商局办理&#xff0c;也可以找专业的代办。…

2024/3/5打卡最长上升子序列**----线性DP,贪心,单调栈

目录 题目&#xff1a; DP分析&#xff1a; 代码&#xff1a; 3.6更新 贪心 第一个思考方式 先上代码&#xff1a; 解析&#xff1a; 贪心 第二个思考方式 &#xff08;与上面的思路差不多&#xff0c;但是换了个角度&#xff09; 思路&#xff1a; 代码&#xff1a; …

探索神经网络在商品销售和图像识别中的应用

目录 前言人工神经网络简介1.1 人工神经网络与深度学习简介1.2 生物神经元结构与神经元机器模型1.3 神经网络的数据量与性能关系 2 需求预测2.1 需求预测的背景2.2 商品销售神经元机器模型2.3 多层神经网络结构的优势 3 图像识别3.1 图像识别神经网络技术3.2 实际应用场景 结语…