springboot +flowable,处理 flowable 的用户和用户组(一)

一.简介

对于flowable是什么以及关于此框架的具体信息可以参看此项目的官方文档:https://www.flowable.org/docs/userguide/index.html

Flowable is a light-weight business process engine written in Java.这是官网文档对此框架的完美解释:Flowable是一个用java语言写的轻量级工作流引擎。

在实际开发中,很少会直接用到 flowable 中的用户体系,但是毕竟官方设计了这个东西,而存在就必然有其合理性。写个 Spring Boot 的demo,学习怎么去添加、删除、修改一个用户或者组。

二.springboot整合flowable

1.使用版本

springBoot版本:2.3.2.RELEASE
flowable版本:6.5.0

2.创建项目

创建一个 SpringBoot 项目,引入 Web、和 MySQL 驱动两个依赖,截图如下:
在这里插入图片描述

3.项目依赖pom.xml

springboot 版本

        <parent>
           <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.3.0.RELEASE</version>
         <relativePath/> <!-- lookup parent from repository -->
      </parent>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-engine</artifactId>
            <scope>compile</scope>
            <version>6.5.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter-basic</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-bpmn-layout</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

4.项目配置application.yml

数据库和flowable的配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flowable?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456

flowable:
  database-schema-update: true
   # flase:       默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。(生产环境常用)
   # true:        activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。(开发时常用)
   # create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。(单元测试常用)
   # drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)。
  process:
    definition-cache-limit: -1
  activity-font-name: 宋体
  label-font-name: 宋体
  annotation-font-name: 宋体
  check-process-definitions: false
  process-definition-location-prefix: classpath*:/processes/
  process-definition-location-suffixes: **.bpmn20.xml,**.bpmn

flowable.check-process-definitions:这个表示是否在项目启动的时候,去检查文件目录是否有对应的流程文件,该属性为 true 表示如果有流程文件就自动部署,false 表示不检查,那么也就不会自动部署。

flowable.process-definition-location-prefix:这个是流程文件的位置,默认就是 classpath*:/processes/,当然开发者也可以进行配置。

flowable.process-definition-location-suffixes:这个是流程文件的后缀,默认有两个,分别是 **.bpmn20.xml 和 **.bpmn,当然开发者也可以进行配置。
flowable的配置,再默认情况下,位于 resources/processes 的流程都会被自动部署。
配置完成后,就可以启动项目了。项目启动成功之后,flowable 数据库中就会自动创建如下这些表,会自动初始化数据库,将来流程引擎运行时候的数据会被自动持久化到数据库中。。数据库表的截图如下:
在这里插入图片描述

三.用户操作

在 Spring Boot 中,flowable 默认已经给我们配置好了 IdentityService 对象,我们只需要将之注入到项目中就可以使用了。

1.添加用户接口

代码如下:

@Autowired
IdentityService identityService;
@Test
void contextLoads() {
    UserEntityImpl user = new UserEntityImpl();
    user.setId("javaboy");
    user.setDisplayName("江南一点雨");
    user.setPassword("123");
    user.setFirstName("java");
    user.setLastName("boy");
    user.setEmail("javaboy@qq.com");
    user.setRevision(0);
    identityService.saveUser(user);
}

需要注意的是 revision 的值为 0 表示这是一个新添加的用户。
添加之后,我们在数据库的 ACT_ID_USER 表中,就可以看到刚刚加入的数据了:
在这里插入图片描述

2.修改用户接口

如果是修改用户密码,可以调用如下方法:

@Test
void test02() {
    UserEntityImpl user = new UserEntityImpl();
    user.setId("javaboy");
    user.setPassword("666");
    user.setRevision(1);
    identityService.updateUserPassword(user);
}

虽然这个方法名是 updateUserPassword,但是实际上这个也能修改其他属性。

这里有一个点要注意,就是用户用到了乐观锁,所以修改的时候,要自己把 revision 写对了,否则修改会失败,然而我们往往并不记得 revision 是多少,所以最好是先查询,后修改,如下:

@Test
void test03() {
    User u = identityService.createUserQuery().userId("javaboy").singleResult();
    u.setDisplayName("itboy");
    identityService.updateUserPassword(u);
}

如果是强行给一个不匹配的 revision,执行的时候会报如下错误:

在这里插入图片描述

当然,修改用户的时候也可以调用 saveUser 方法,这个方法会根据用户 id 查询用户,如果用户已经存在,则直接修改(修改 password 之外的其他属性),否则就添加。

3.删除用户接口

根据用户 id 删除一个用户,代码如下:

@Test
void test05() {
    identityService.deleteUser("javaboy");
}

4.查询用户

查询方式比较丰富,通过用户的各个属性都可以查询,例如可以查询所有姓黄的用户,代码如下:

@Test
void test06() {
    List<User> list = identityService.createUserQuery().userDisplayNameLike("黄%").orderByUserId().asc().list();
    for (User user : list) {
        System.out.println("user.getDisplayName() = " + user.getDisplayName());
    }
}

查询所有的用户,代码如下:

@Test
void test07() {
    List<User> list = identityService.createUserQuery().list();
    for (User user : list) {
        System.out.println("user.getId() = " + user.getId());
    }
}

当然还有其他方法,包括排序、分页等。

如果觉得这些方法调用起来费事,那么也可以直接上 SQL,这个底层数据库操作用的 MyBatisPlus,所以这个 SQL 中参数的写法就按照 MyBatisPlus 里边的来即可,代码如下:

@Test
void test08() {
    List<User> list = identityService.createNativeUserQuery().sql("select * from ACT_ID_USER where DISPLAY_NAME_ like #{name}").parameter("name", "李%").list();
    for (User user : list) {
        System.out.println("user.getId() = " + user.getId());
    }
}

有的时候,如果不记得表名,也可以按照如下方式现场根据类名查询该类对应的表名,如下:

@Test
void test08() {
    List<User> list = identityService.createNativeUserQuery().sql("select * from "+idmManagementService.getTableName(User.class)+" where DISPLAY_NAME_ like #{name}").parameter("name", "李%").list();
    for (User user : list) {
        System.out.println("user.getId() = " + user.getId());
    }
}

下一篇,继续学习springboot +flowable,处理 flowable 的用户和用户组(二)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

养老保障金查询系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87700421 更多系统资源库…

Redis入门学习笔记【二】Redis缓存

目录 一、Redis缓存 二、Redis使用缓存遇到的问题 2.1 数据一致性 2.2缓存雪崩 2.3 缓存穿透 2.4 缓存击穿 一、Redis缓存 数据缓存是Redis最重要的一个场景&#xff0c;为缓存而生&#xff0c;在springboot中&#xff0c;一般有两种使用方式&#xff1a; 直接通过RedisT…

【无人机】无人机平台的非移动 GPS 干扰器进行位置估计的多种传感器融合算法的性能分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

leetcode142_环形链表 II

文章目录 题目详情分析Java完整代码 题目详情 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

「数据架构」MDM实现失败的主要原因

我经常参与一个组织的MDM程序&#xff0c;当他们在一个失败的项目之后向InfoTrellis请求帮助进行清理&#xff0c;或者开始尝试X&#xff0c;以实现对某些人来说非常困难的目标时。主数据管理实现失败的原因有很多&#xff0c;但是没有一个是由于在这些场景中使用的责备游戏的原…

MySQL-中间件mycat(一)

目录 &#x1f341;mycat基础概念 &#x1f341;Mycat安装部署 &#x1f343;初始环境 &#x1f343;测试环境 &#x1f343;下载安装 &#x1f343;修改配置文件 &#x1f343;启动mycat &#x1f343;测试连接 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f9…

找网站绝对路径

目录 Linux系统 目标出网。且命令有回显 目标出网&#xff0c;命令无回显 目标不出网&#xff0c;命令无回显 Windows系统 目标出网&#xff0c;命令有回显 目标出网&#xff0c;命令无回显 目标不出网&#xff0c;命令无回显 Linux系统 目标出网。且命令有回显 find …

gpt在线使用-免费的 GPT在哪下载

免费的 GPT&#xff08;Generative Pre-trained Transformer&#xff09; 。现在您可以免费体验我们的 GPT 技术&#xff0c;来让您的业务或项目更加智能。 GPT 是一种基于最前沿的自然语言处理技术&#xff0c;它展现出了令人惊叹的预测能力和交互性能。我们的 GPT 是在世界顶…

SQL Compliance Manager Crack

SQL Compliance Manager Crack 新的SQL CM云代理-扩展了当前SQL CM代理的功能&#xff0c;以支持EC2上Microsoft SQL服务器的远程审核。允许用户添加在共享网络位置上活动的SQL Server&#xff0c;以写入/读取数据并支持DBaaS SQL Server实例。云代理包含与当前SQL代理相同的行…

被chatGPT割了一块钱韭菜

大家好&#xff0c;才是真的好。 chatGPT热度一直上升&#xff0c;让我萌生了一个胆大而创新的想法&#xff0c; 把chatGPT嵌入到Notes客户机中来玩。 考虑到我已经下载了一个chatGPT的Notes应用&#xff08;请见《ChatGPT APIs for HCL DOMINO》&#xff09;&#xff0c;想着…

No.045<软考>《(高项)备考大全》【专项1】《案例分析 - 简介、方法、技巧、理论》

《案例分析》 1 专项介绍1.1 考试分析1.2 试卷参考1.3 题型分析 2 案例分析答题技巧2.1 考试6要2.2 三不要—可以2.3 其他技巧 3 案例中的万金油4 各领域中的重要工具与输出5 案例分析答题技巧6 案例分析理论题历年考点分析6.1 一般知识和科研立项6.2 整体、范围、需求6.3 进度…

我想知道,就目前形势而言,学java好还是C++好?

前言 就现实点看看&#xff0c;可以对比现在Java和C的市场占有率&#xff0c;可以看到&#xff0c;到目前为止&#xff0c;Java在国内编程语言的市场仍然是占据着大头&#xff0c;在招聘当中Java的人数占有率仍然是遥遥领先于C&#xff0c;Java目前开阔的市场以及其巨大的岗位…

风光场景削减及源荷不确定性的虚拟电厂随机优化调度研究(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

Python小姿势 - ###### 随机选取的知识点:Python日期时间处理

随机选取的知识点&#xff1a;Python日期时间处理 Python日期时间处理&#xff1a;一种更简单的方式 日期和时间处理是许多程序中必不可少的部分。Python提供了一个标准库来处理日期和时间&#xff0c;这个库叫做datetime&#xff0c;它提供了一些类来处理不同的日期和时间格式…

SpringCloud --- Nacos注册中心、配置管理

一、Nacos注册中心 1.1、认识和安装Nacos Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 1.2、服务注册到nacos Nacos是SpringCloudAlibaba的组件&#xff0c;而SpringCloudAlibaba也遵循Spr…

基于U-Net系列的医学图像分割

U-Net 在FCN 的基础上增加了上采样操作的次数和跳跃连接&#xff0c;使用跳跃连接将解码器的输出特征与编码器的语义特征融合&#xff0c;提高了分割精度&#xff0c;改善了 FCN 上采样不足的问题。 U-Net中没有全连接层&#xff0c;通过互连卷积与反卷积过程中的特征&#xff…

前端优化的分析

前端优化的分析 目录概述需求&#xff1a; 设计思路实现思路分析渲染层性能更好的API 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,cha…

在线问诊小程序系统方案以及价值

方案价值zlzwgz0127 1.扩大医院流量 a.预约到院 在线展示专家的介绍&#xff0c;更能彰显实力&#xff0c;吸引患者来院就医&#xff0c; 用户可选择在线问诊和预约到院 b.社区团购导流 与我们合作社区团购给医院的体检产品导流 c.专家直播导流 通过专家直播吸引潜在患者…

分享两个有意思的登录界面

1.带有浮动占位符和灯光按钮的登录界面 先上效果&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>html {height: 100%;}body {m…

GB/T 28181-2022 新版差异笔记

GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…