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. js中DOM事件探究

    事件 纲要 理解事件流 使用事件处理程序 不同的事件类型 javascript和html的交互是通过事件实现的.事件就是文档或浏览器窗口发生的一些特定交互瞬间.可以使用侦听器(事件处理程序)预定事件, ...

  2. D3.js中国地图下钻

    使用d3.js实现中国地图及中国地图下钻到省市区 在可视化开发中,地图是很重要的一个环节,很多时候需要展现的不仅是国家地图,还需要能从国家进入到省市,看到区这样的下钻过程,今天我们就来实现这个效果. ...

  3. 分享一个react 图片上传组件 支持OSS 七牛云

    react-uplod-img 是一个基于 React antd组件的图片上传组件 支持oss qiniu等服务端自定义获取签名,批量上传, 预览, 删除, 排序等功能 需要 react 版本大于 v ...

  4. 从零到有模拟实现一个Set类

    前言 es6新增了Set数据结构,它允许你存储任何类型的唯一值,无论是原始值还是对象引用.这篇文章希望通过模拟实现一个Set来增加对它的理解. 原文链接 用在前面 实际工作和学习过程中,你可能也经常用 ...

  5. Myeclipse 中怎样更改web项目的访问名

    第一步:在要修改的项目名称上右击选择最下面一列的"prepertise"(属性),进入属性设置界面. 第二步:找到左侧菜单栏的"Myeclipse"中的web项 ...

  6. indexOf返回值问题

    String s = "aoood";System.out.println(s.indexOf(""));//返回0 System.out.println(s. ...

  7. C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

    --概述 这个项目演示了如何在WPF中使用各种Prism功能的示例.如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表中开始.每个示例都基于前一个示例的概念. 此项目平台框架:.NET ...

  8. windows+ubuntu双系统时间同步问题

    windows+ubuntu双系统时间同步问题 给Ubuntu更新时间,在终端输入: sudo apt-get install ntpdate sudo ntpdate time.windows.co ...

  9. nfs客户端的一次处理

    为什么要说这个呢,由于节点环境不一致,导致在重建pod时,我们暂且叫该pod为 cxpod,cxpod所在宿主机出现了问题现象如下:一.cxpod始终处于创建中 ContainerCreating [ ...

  10. OpenHarmony标准设备应用开发(三)——分布式数据管理

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章,我们通过分布式音乐播放器.分布式炸弹.分布式购物车,带大家讲解了 OpenAtom OpenHarmon ...