spring boot(八)整合activiti工作流(一)

##前言

  • activiti介绍
    activiti是一个业务流程管理(BPM)框架。它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。开发人员可以通过插件直接绘画出业务流程图。
  • ProcessEngine
    ProcessEngine对象是activiti的工作流引擎。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
  • BPMN:
    业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
  • 数据库:
    Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
    ACT_RE_: 'RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
    ACT_RU_
    : 'RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
    ACT_ID_: 'ID’表示identity。 这些表包含身份信息,比如用户,组等等。
    ACT_HI_
    : 'HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
    ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
  • 资源库流程规则表:
  1. act_re_deployment 部署信息表
  2. act_re_model 流程设计模型部署表
  3. act_re_procdef 流程定义数据表
  • 运行时数据库表:
  1. act_ru_execution 运行时流程执行实例表
  2. act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
  3. act_ru_task 运行时任务节点表
  4. act_ru_variable 运行时流程变量数据表
  • 历史数据库表:
  1. act_hi_actinst 历史节点表
  2. act_hi_attachment 历史附件表
  3. act_hi_comment 历史意见表
  4. act_hi_identitylink 历史流程人员表
  5. act_hi_detail 历史详情表,提供历史变量的查询
  6. act_hi_procinst 历史流程实例表
  7. act_hi_taskinst 历史任务实例表
  8. act_hi_varinst 历史变量表
  • 组织机构表:
  1. act_id_group 用户组信息表
  2. act_id_info 用户扩展信息表
  3. act_id_membership 用户与用户组对应信息表
  4. act_id_user 用户信息表
    这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
  • 通用数据表:
  1. act_ge_bytearray 二进制数据表
  2. act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。
  • 我的开发环境:
    mysql版本号: 8.0.11
    spring boot : 2.0.1.RELEASE
    mysql-connect-java依赖版本号 :8.0.11
    spring-mybatis-verison依赖版本号:1.3.1
    ###1、添加依赖
    在添加升级完mysql到8.0.11后,重新启动项目也报了不少错误,在此也记录一下。

  • 1、mysql驱动依赖版本号和mysql版本号不匹配

java连接mysql 8.0.11报错:

java.sql.SQLException: Unknown system variable ‘query_cache_size‘
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:115)

升级完mysql connect依赖驱动解决。

  • 2、druid-spring-boot-starter依赖的版本号也需和mysq匹配
    如果报错可能也需要升级数据库链连池的依赖

  • 3、添加activiti工作流依赖


	org.activiti
	activiti-spring-boot-starter-basic
	5.22.0

  • 4、添加ProcessEngineAutoConfiguration数据源配置
@Configuration
public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {

    //注入数据源和事务管理器
    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration(
            @Qualifier("dataSource") DataSource dataSource,
            @Qualifier("transactionManager") PlatformTransactionManager transactionManager,
            SpringAsyncExecutor springAsyncExecutor) throws IOException {
        return this.baseSpringProcessEngineConfiguration(dataSource, transactionManager, springAsyncExecutor);
    }

}

当然你也可按官网的方法,添加一个内存数据库依赖:


	com.h2database
	h2
	1.4.183

如果只是为了初学,那么可先这么做。但一般我们是希望放到自己定的数据库中的。

  • 5、添加bpmn文件
    在resources文件夹下添加processes目录并添加文件bpmn流程文件
    这个文件我是直接从官网复制的



    
        
        
        
        
        
    


为什么要添加到这个目录下,官网原文:
这里写图片描述
在processes文件夹下的文件会自动部署。

  • 6、添加完后启动,报错:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-05-26 00:39:54.577 ERROR 9472 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at com.clockbone.web.bootstrap.ApplicationBoot.main(ApplicationBoot.java:26) [classes/:na]
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) ~[na:1.8.0_171]
	at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) ~[na:1.8.0_171]
	at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) ~[na:1.8.0_171]
	at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) ~[na:1.8.0_171]
	at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) ~[na:1.8.0_171]
	at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) ~[na:1.8.0_171]
	at java.lang.Class.createAnnotationData(Class.java:3521) ~[na:1.8.0_171]

在spring boot启动类上排除类SecurityAutoConfiguration的自动注入,解决。如何排查报错原因参考:
http://hengyunabc.github.io/spring-boot-ArrayStoreException/
https://blog.csdn.net/zhanghai005243/article/details/80234698

  • 7、启动完成

启动完成后,可以看到数据库会自动生成相关表:
spring boot(八)整合activiti工作流(一)_第1张图片

###参考官网:
https://spring.io/blog/2015/03/08/getting-started-with-activiti-and-spring-boot
https://www.activiti.org/userguide/index.html#_processenginefactorybean

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