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. 夏日葵电商:连锁零售店小程序o2o系统解决方案

    公众平台"附近小程序"功能上线后,一个主体账号可以同时绑定N+个门店,这对连锁零售店铺来说是重磅福利呀,无论你是通过搜索还是线下扫码进入小程序,线上与线下都完全贯通了,线上多种入口 ...

  2. JavaScript 工作原理之六-WebAssembly 对比 JavaScript 及其使用场景

    原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第六章. 现在 ...

  3. Android Studio 异常以及解决方案

    1. Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVER ...

  4. OllyDbg---比较、条件跳转指令

    比较和条件跳转 CMP 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位.当两个操作数相等时,零标志位Z置为1. 两个操作数不相等时,零标志位Z被 ...

  5. Ubuntu16更换flatabulous主题

    Ubuntu16更换flatabulous主题 安装unity-tweak-tool sudo apt-get install unity-tweak-tool 安装flatabulous主题 sud ...

  6. shiro+springboot分析思路

    文章目录 前言 一.为什么要使用shiro 二.使用步骤 1.如何认证和授权 2.如何获取数据 总结 前言 shiro和spring security等安全框架可以用户管理和权限认证 一.为什么要使用 ...

  7. 领域驱动模型DDD(二)——领域事件的订阅/发布实践

    前言 凭良心来说,<微服务架构设计模式>此书什么都好,就是选用的业务过于庞大而导致代码连贯性太差,我作为读者来说对于其中采用的自研框架看起来味同嚼蜡,需要花费的学习成本实在是过于庞大,不仅 ...

  8. 深入理解Kafka核心设计及原理(五):消息存储

    转载请注明出处:https://www.cnblogs.com/zjdxr-up/p/16127749.html 目录: 5.1文件目录布局 5.2消息压缩 5.3日志索引 5.4日志文件及索引文件分 ...

  9. Codeforces Round #721 (Div. 2)A. And Then There Were K(位运算,二进制) B1. Palindrome Game (easy version)(博弈论)

    半个月没看cf 手生了很多(手动大哭) Problem - A - Codeforces 题意 给定数字n, 求出最大数字k, 使得  n & (n−1) & (n−2) & ...

  10. HCIE笔记-第五节-IP地址+VLSM

    192.168.1.111 -- 点分十进制 -- IPV4地址表示格式 计算机 只能识别 01010101 二进制 4组十进制数 规则:二进制0/1 在不同位表达的含义是不一致的,0永远代表不取值, ...