1.pom依赖

    <!--activiti7与SpringBoot整合的相关依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>
​<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties>
​<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
​<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
​<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter --><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.0.0.Beta2</version></dependency>
​<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency>
​
​</dependencies>
​<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2.数据库配置

spring:datasource:url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTusername : rootpassword : rootdriver-class-name: com.mysql.jdbc.Driver

3.添加SpringSecurity安全框架

因为 Activiti7 与 SpringBoot 整合后,默认情况下,集成了 SpringSecurity 安全框架,这样我们就要去准备 SpringSecurity 整合进来的相关用户权限配置信息。

(1)添加SecurityUtil类

@Component
public class SecurityUtil {
​@Autowiredprivate UserDetailsService userDetailsService;
​public void logInAs(String username) {
​UserDetails user = userDetailsService.loadUserByUsername(username);if (user == null) {throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");}
​SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return user.getAuthorities();}
​@Overridepublic Object getCredentials() {return user.getPassword();}
​@Overridepublic Object getDetails() {return user;}
​@Overridepublic Object getPrincipal() {return user;}
​@Overridepublic boolean isAuthenticated() {return true;}
​@Overridepublic void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
​}
​@Overridepublic String getName() {return user.getUsername();}}));org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);}
}

(2)添加DemoApplicationConfig 类

它的作用是为了实现SpringSecurity 框架的用户权限的配置,这样我们就可以在系统中使用用户权限信息。

@Configuration
@EnableWebSecurity
public class DemoApplicationConfiguration extends WebSecurityConfigurerAdapter {
​private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);
​@Override@Autowiredpublic void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(myUserDetailsService());}
​@Beanpublic UserDetailsService myUserDetailsService() {
​InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
​String[][] usersGroupsAndRoles = {{"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"system", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"},{"admin", "password", "ROLE_ACTIVITI_ADMIN"},};
​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 + "]");inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]),authoritiesStrings.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())));}
​
​return inMemoryUserDetailsManager;}
​
​@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();}
​@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

(3)创建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class Actviti7DemoApplicationTests {@Autowiredprivate ProcessRuntime processRuntime;@Autowiredprivate TaskRuntime taskRuntime;@Autowiredprivate SecurityUtil securityUtil;
}

(4)查看流程定义信息

activiti7与SpringBoot整合后会自动读取resources/processes下的所有bpmn流程图

    @Testpublic void contextLoads() {securityUtil.logInAs("salaboy");Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));System.out.println("可用的流程定义数量:" + processDefinitionPage.getTotalItems());for (ProcessDefinition pd : processDefinitionPage.getContent()) {System.out.println("流程定义:" + pd);}}

(5)启动流程实例

@Test
public void testStartProcess() {securityUtil.logInAs("system");ProcessInstance pi = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("myProcess_1").build());System.out.println("流程实例ID:" + pi.getId());
}

(6)查询并完成任务

该实例的流程图中,已经指定两个步骤的指派的组。我们可以用指定组中的用户登录去查询任务并完成任务。

    @Testpublic void testTask() {securityUtil.logInAs("ryandawsonuk");Page<Task> taskPage = taskRuntime.tasks(Pageable.of(0, 10));if (taskPage.getTotalItems() > 0) {//遍历任务列表for (Task task : taskPage.getContent()) {//拾取任务 candidateGroups="activitiTeam"taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());System.out.println("任务:" + task);//执行任务taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());}}Page<Task> taskPage2 = taskRuntime.tasks(Pageable.of(0, 10));if (taskPage2.getTotalItems() > 0) {System.out.println("任务:" + taskPage2.getContent());}}

Activiti与SpringBoot的整合相关推荐

  1. 《Activiti/Flowable  深入BPM工作流》- Activiti 与springboot 怎么进行整合?

    <Activiti/Flowable  深入BPM工作流> -Activiti 与springboot 怎么进行整合? 一.问题 Activiti 如何与springboot进行整合? 1 ...

  2. Activiti学习笔记:Activiti和Spring整合、Activiti和SpringBoot整合之Gradle版

    环境 activiti:7+ Java:11 本机环境:window MySQL:5.7 gradlew:6+ Activiti和Spring整合 大体流程: 先创建项目,并导入依赖 添加activi ...

  3. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  4. springboot+security整合(1)

    说明 springboot 版本 2.0.3 源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+s ...

  5. SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调度.系统的监控处理,实际上这些操 作都可以通过 SpringBoot 进行整合操作.2.1.SpringBoot 整合邮件服 ...

  6. springboot下整合各种配置文件

    本博是在springboot下整合其他中间件,比如,mq,redis,durid,日志...等等  以后遇到再更.springboot真是太便捷了,让我们赶紧涌入到springboot的怀抱吧. ap ...

  7. springboot项目整合mybatis

    SpringBoot项目整合mybatis 本章内容 使用 idea创建 SpringBoot项目 SpringBoot项目中配制 mybatis 框架 1 创建 SpringBoot项目 1.1 在 ...

  8. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...

  9. SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!

    作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...

最新文章

  1. 微型计算机硬件采用什么,微型计算机的硬件系统包括什么?
  2. 敏捷开发流程的8个步骤_敏捷开发——个体和互动高于流程和工具
  3. python神经网络实例_Python编程实现的简单神经网络算法示例
  4. 正则表达式中符号的含义(可能不是很全)
  5. qt 分辨率问题 安卓_Qt for Android dp转换
  6. 计算机地图制图的点状符号制作,计算机地图制图地图符号库系统建立全解.doc...
  7. 信息学奥赛一本通1090
  8. Photoshop 有什么技巧让你相见恨晚?
  9. 解释缩写词在html中的标记写法是,abbr:HTML5中缩略词标记的重要作用
  10. 2021-2027全球与中国自动卡车装卸系统市场现状及未来发展趋势
  11. 企业网站常见误区-金瑞帆高端建站
  12. 妻子,情人,玫瑰花,刺木花(转载)
  13. AD多层板拼板内电层网络丢失处理
  14. 30ea什么意思_ea阶段是什么?你未必全知道!
  15. 【SSLGZ 1614】医院设置(Dijkstra)
  16. Win系统 - 解决 Win10 笔记本 WiFi 的标志变成小地球
  17. LabVIEW编程LabVIEW控制KELLER压力传感器例程与相关资料
  18. 1715. 苹果和橘子的个数
  19. 深度学习数据驱动_3D目标检测深度学习方法数据预处理综述
  20. 菜谱识别_9种美味食谱,可共享,修改和重新混合

热门文章

  1. sql注入——day01
  2. 近世代数--外直积--外直积是什么?关于阶的性质?
  3. optee内存管理和页表建立
  4. [trustzone]-ARM Trustzone架构下的软件框图
  5. 密码篇——对称加密—3DES
  6. 【网络安全】文件上传绕过思路总结
  7. C/C++实现sleep函数
  8. 软件调试学习笔记(四)—— 异常的处理流程
  9. 1.18 Java匿名类,匿名内部类
  10. 邻接矩阵和邻接表的相互转化