Spring-boot整合Activiti7

pom.xml

    <properties>
       <maven.compiler.source>15</maven.compiler.source>
       <maven.compiler.target>15</maven.compiler.target>
       <activiti.version>7.1.0.M6</activiti.version>
       <mybatis-plus.version>3.3.1</mybatis-plus.version>
   </properties>

   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.6.6</version>
       <relativePath/>
   </parent>

   <dependencies>
       <!-- Activiti -->
       <dependency>
           <groupId>org.activiti</groupId>
           <artifactId>activiti-spring-boot-starter</artifactId>
           <version>${activiti.version}</version>
       </dependency>
       <!-- java绘制activiti流程图 -->
       <dependency>
           <groupId>org.activiti</groupId>
           <artifactId>activiti-image-generator</artifactId>
           <version>${activiti.version}</version>
       </dependency>
       <!-- activiti json转换器-->
       <dependency>
           <groupId>org.activiti</groupId>
           <artifactId>activiti-json-converter</artifactId>
           <version>${activiti.version}</version>
       </dependency>
       <!-- svg转png图片工具-->
       <dependency>
           <groupId>org.apache.xmlgraphics</groupId>
           <artifactId>batik-all</artifactId>
           <version>1.10</version>
       </dependency>

       <!-- web启动器-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>

       <!--mybatis-plusǷ-->
       <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatis-plus-boot-starter</artifactId>
           <version>${mybatis-plus.version}</version>
       </dependency>

       <!-- SpringSecurity -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-security</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>



</project>

Springboot整合Activiti时,需要整合SpringSecurity否则就会报错

application.yml文件

server:
port: 80
servlet:
  context-path: /workflow

spring:
datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/activiti-boot?nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
  username: root
  password: root

 #activiti配置
activiti:
   # 自动更新数据库结构
   # true:适用开发环境,默认值。activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
   # false:适用生产环境。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
   # create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
   # drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
  database-schema-update: true
   # activiti7与springboot整合后默认不创建历史表,需要手动开启
  db-history-used: true
   # 记录历史等级 可配置的历史级别有none, activity, audit, full
   # none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
   # activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
   # audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。
   # full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数
   # 据,包括一些流程参数等。
  history-level: full
   # 是否自动检查resources下的processes目录流程定义文件
  check-process-definitions: false
   
# 日志级别是debug才能显示SQL日志
logging:
level:
  org.activiti.engine.impl.persistence.entity: debug

数据库mysql:5.7

主启动类

@SpringBootApplication
public class workflowApplication {

   public static void main(String[] args) {
       SpringApplication.run(workflowApplication.class,args);
  }
}

测试类

@SpringBootTest
public class ActivitiTesto1 {

   @Autowired
   ProcessEngine processEngine;

   @Autowired
   RepositoryService repositoryService;

   @Test
   public void getProcessEngine() {
       System.out.println("processEngine: " + processEngine);
  }

返回结果

processEngine: org.activiti.engine.impl.ProcessEngineImpl@4cddc3d9 //获取流程实例的时候,数据库的25张表就已经创建出来了.

通过zip压缩包部署流程定义

    /**
    * 通过zip压缩包部署流程定义
    */
   @Test
   public void deplayByZip(){
       //部署流程定义
       //读取zip资源压缩包,转成输入流
       InputStream is = ReflectUtil.getResourceAsStream("processes/leave.zip");
       ZipInputStream zipInputStream = new ZipInputStream(is);
       Deployment deployment = repositoryService.createDeployment()
              .addZipInputStream(zipInputStream)
              .name("请假申请流程压缩包-boot")
              .deploy();
       //部署输出结果
       System.out.println(deployment.getId());
       System.out.println(deployment.getName());
  }

返回结果

d5c1d3f3-dd04-11ec-a50b-54e1ad82f401
请假申请流程压缩包-boot

整合SpringSecurity

activiti7 与 SpringSecurity 强耦合, 创建安全认证配置类SpringSecurityConfig 类

@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
   private final Logger logger = LoggerFactory.getLogger(SpringSecurityConfig.class);

   /**
    * 内存 UserDetailsManager
    */
   @Bean
   public UserDetailsService myUserDetailsService() {
       InMemoryUserDetailsManager inMemoryUserDetailsManager = new
               InMemoryUserDetailsManager();
       // 初始化账号角色数据
       addGroupAndRoles(inMemoryUserDetailsManager);
       return inMemoryUserDetailsManager;
  }

   private void addGroupAndRoles(UserDetailsManager userDetailsManager) {
       // 注意:后面流程办理人,必须是当前存在的用户 username
       String[][] usersGroupsAndRoles = {
              {"wkh", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
              {"zdx", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
              {"wll", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
              {"wsy", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"},
              {"zyb", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"},
              {"gj", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"}
      };

       for (String[] user : usersGroupsAndRoles) {
           List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2,
                   user.length));
           logger.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");
           userDetailsManager.createUser(new User(user[0],
                   passwordEncoder().encode(user[1]),
                   authoritiesStrings.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())));
      }
  }

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.csrf().disable();
  }

   @Bean
   public PasswordEncoder passwordEncoder() {
       return new BCryptPasswordEncoder();
  }
}

Spring-boot整合Activiti7的更多相关文章

  1. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  2. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  3. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  4. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  5. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  6. spring boot整合Hadoop

    最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...

  7. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  8. spring boot 整合 百度ueditor富文本

    百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...

  9. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

  10. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

随机推荐

  1. 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index

    前言 最近,在项目中遇到一个关于CSS中元素z-index属性的问题,具体问题不太好描述,总结起来就是当给元素和父元素色设置position属性和z-index相关属性后,页面上渲染的元素层级结果和我 ...

  2. 使用Canvas和JavaScript做一个画板

    本文同步于个人博客:https://zhoushuo.me/blog/2018/03/11/drawing-borad/ 前些天学习了HTML5的<canvas>元素,今天就来实践一下,用 ...

  3. PAT B1076 Wifi密码

    题目描述: 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同 ...

  4. 从零搭建react开发环境

    早在六年前,前端开发已经实现了模块化.工程化开发,既然是模块化工程化开发那就少不了包管理工具,所以我们的第一步就是先从安装nodejs开始(安装nodejs携带JavaScript的包管理工具npm) ...

  5. AcWing 1220. 生命之树

    题目链接 题目描述: 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任 ...

  6. 设计模式学习笔记(十五)命令模式及在Spring JdbcTemplate 中的实现

    命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储.传递.调用.增加与管理. 也就是将发送者.接收者和调用命令封装成独立的对象,来供客户端调 ...

  7. Hyperledger Fabric节点的动态添加和删除

    前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织.本文将在其基础上,详细介绍了如何在 soft 组织上添加新的 peer2 节点,并 ...

  8. TexFormula2Word: 将Latex公式转换为MathML的Chrome扩展

    前言 因为学校要求对毕业论文进行格式检查,而格式检查又必须上传Word文件,这就导致只能使用Word写毕业论文.但Word公式输入实在是太难用,加之我在小论文中已经用Latex写过大部分公式,所以就希 ...

  9. 2021.12.06 P2511 [HAOI2008]木棍分割(动态规划)

    2021.12.06 P2511 [HAOI2008]木棍分割(动态规划) https://www.luogu.com.cn/problem/P2511 题意: 有n根木棍, 第i根木棍的长度为 \( ...

  10. 听说Integer有bug?1000不等于1000?

    bug? 前几天有位朋友找我,说:"老哥,老哥,我好像发现了Integer一个bug,你帮我看看什么情况?",说完给了我两个很简单的demo,上代码. 100 == 100 100 ...