SpringBoot整合Activiti7

一、背景

       因工作需要,公司需要建设一个类似工单系统,想借助activiti工作流引擎来进行实现,但目前网上Spring Boot与Activiti7整合的例子都不是特别全,大多都是Activiti6居多,借工作之余学习记录一下。

二、环境搭建

       一开始我选择的Activiti7最新的版本 7.1.0.M6,从7版本开始,activiti开始精简了原先的旧版本的一些接口,将原先的接口方法整合了security做权限验证出了新的接口api,新的api基本在xx-runtime包中可以看到,主推使用新版的接口来操作工作流的具体操作。再后来整合过程中发现,M5,M6版本在项目启动后会自动部署一个空流程定义,在查询流程列表的时候会出现大量的这种数据,需要后端自己去手动排除这些数据,降级到M4,M4中有个判断,当resource下没有bpmn文件时,不会自动部署一个空流程定义,具体见下图:

SpringProcessEngineConfiguration类
 protected void autoDeployResources(ProcessEngine processEngine) {
        if (this.deploymentResources != null && this.deploymentResources.length > 0) {
            AutoDeploymentStrategy strategy = this.getAutoDeploymentStrategy(this.deploymentMode);
            strategy.deployResources(this.deploymentName, this.deploymentResources, processEngine.getRepositoryService());
        }
    }

但在整合M4时,启动时会出现sql mapper中字段和数据库自动创建的表字段对应不上的情况,因此再次降级到M1则上述问题都不存在。

最终我采用的版本是 7.1.0.M1

附上Maven版本:

activiti: 7.1.0.M1,需要排除自身的mybatis依赖防止冲突

mybatis-plus:3.3.2

spring-boot:2.3.2.RELEASE


	org.springframework.boot
	spring-boot-starter-parent
	2.3.2.RELEASE
	 
        


	org.springframework.boot
	spring-boot-starter-web




	org.activiti
	activiti-spring-boot-starter
	7.1.0.M1
	
		
		
			org.mybatis
			*
		
	




	io.jsonwebtoken
	jjwt
	0.9.1




	com.baomidou
	mybatis-plus-boot-starter
	3.3.2


	mysql
	mysql-connector-java

application.yml:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
    username: root
    password: 12345678
    #hikari数据库连接池
    hikari:
      pool-name: Activiti_HikariCP
      minimum-idle: 5 #最小空闲连接数量
      idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟)
      maximum-pool-size: 10 #连接池最大连接数,默认是10
      auto-commit: true  #此属性控制从池返回的连接的默认自动提交行为,默认值:true
      max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000
      connection-test-query: SELECT 1


# activiti配置
  activiti:
    #每次应用启动不检查Activiti数据表是否存在及版本号是否匹配,提升应用启动速度,第一次需要设置为true
    database-schema-update: true
    #保存历史数据级别设置为full最高级别,便于历史数据的追溯
    history-level: full
    #生成历史表
    db-history-used: true
    #关闭检查流程定义文件
    check-process-definitions: false
    #开启定时器
    asyncExecutorActivate: true
    #开启流程执行树日志显示
    enableVerboseExecutionTreeLogging: true

# MyBatis-Plus配置
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.zm.demo.db
  configuration:
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
    banner: false
    # SQL 执行log,调试时可打开
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

三、整合Security+JWT

借鉴参考了 SpringBoot+JWT完成token验证 ,security 部分需要自己实现UserDetailsService,UserDetails,以及继承WebSecurityConfigurerAdapter来配置过滤规则

四、activiti画图工具

推荐使用Camunda Modeler 进行流程图的绘制,然后只需要将生成的xml中的 camunda: 前缀全部修改为 activiti:  以及将bpmn:definitions 中的

xmlns:camunda="http://camunda.org/schema/1.0/bpmn"

修改为 

xmlns:activiti="http://activiti.org/bpmn"

就可以运行。

五、完整demo例子

activiti-demo

你可能感兴趣的:(Activiti7,activiti,spring,boot)