工作流Flowable和Spring集成时,有一个xml是用来配置ProcessEngine的信息,xml的内容如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd      http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context.xsd  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd   http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"><!-- Activiti begin --><bean id="processEngineConfiguration" class="com.xxx.xxx.config.ExtProcessEngineConfiguration"><property name="dataSource" ref="dataSource" /><property name="transactionManager" ref="transactionManager" /><property name="databaseSchemaUpdate" value="true" /><!--  property name="jobExecutorActivate" value="false" /--><property name="customSessionFactories"><list><bean class="com.xxx.xxx.entity.EntityManagerFactory"><constructor-arg index="0" value="org.flowable.idm.engine.impl.persistence.entity.UserEntityManager" /><constructor-arg index="1"><bean class="com.xxx.xxx.entity.SmartUserEntityManager"/></constructor-arg></bean><bean class="com.xxx.xxx.entity.EntityManagerFactory"><constructor-arg index="0" value="org.flowable.idm.engine.impl.persistence.entity.GroupEntityManager" /><constructor-arg index="1"><bean class="com.xxx.xxx.entity.SmartGroupEntityManager"/></constructor-arg></bean><bean class="com.xxx.xxx.entity.EntityManagerFactory"><constructor-arg index="0" value="org.flowable.idm.engine.impl.persistence.entity.MembershipEntityManager" /><constructor-arg index="1"><bean class="com.xxx.xxx.entity.SmartMembershipEntityManager"/></constructor-arg></bean></list></property></bean><bean id="processEngine" factory-bean="processEngineConfiguration" factory-method="buildProcessEngine" /><bean id="repositoryService" factory-bean="processEngineConfiguration" factory-method="getRepositoryService"  /><bean id="runtimeService" factory-bean="processEngineConfiguration" factory-method="getRuntimeService" /><bean id="taskService" factory-bean="processEngineConfiguration" factory-method="getTaskService" /><bean id="historyService" factory-bean="processEngineConfiguration" factory-method="getHistoryService" /><bean id="managementService" factory-bean="processEngineConfiguration" factory-method="getManagementService" /><bean id="formService" factory-bean="processEngineConfiguration" factory-method="getFormService" /><bean id="identityService" factory-bean="processEngineConfiguration" factory-method="getIdentityService" /><bean id="commandExecutor" factory-bean="processEngineConfiguration" factory-method="getCommandExecutor" /><bean id="processDefinitionCache" factory-bean="processEngineConfiguration" factory-method="getProcessDefinitionCache"/></beans>

使用Spring boot之后推崇java配置取代xml配置,要对这个xml进行改造首先得搞清楚这个xml里面的内容,主要是定义了ExtProcessEngineConfiguration和它相关的属性,

  1. 说明: 
    constructor-arg:通过构造函数注入。 
    property:通过setter对应的方法注入。 
    factory-method:通过工厂方法来构造java Bean

  2. 创建config配置文件WorkflowConfiguration,在这个类中通过@bean的注解构造ExtProcessEngineConfiguration 类,同时设置ExtProcessEngineConfiguration 需要的几个属性

@Configuration
public class WorkflowConfiguration {private final DataSource dataSource;private final PlatformTransactionManager transactionManager;public WorkflowConfiguration(DataSource dataSource,PlatformTransactionManager transactionManager){this.dataSource = dataSource;this.transactionManager = transactionManager;}@Beanpublic SmartUserEntityManager smartUserEntityManager() {return new SmartUserEntityManager(new ExtProcessEngineConfiguration());}@Beanpublic SmartGroupEntityManager smartGroupEntityManager() {return new SmartGroupEntityManager(new ExtProcessEngineConfiguration());}@Beanpublic SmartMembershipEntityManager smartMembershipEntityManager() {return new SmartMembershipEntityManager(new ExtProcessEngineConfiguration());}public EntityManagerFactory userEntityManagerFactory(){EntityManagerFactory entityManagerFactory = new EntityManagerFactory(UserEntityManager.class, smartUserEntityManager());return entityManagerFactory;}public EntityManagerFactory groupEntityManagerFactory(){EntityManagerFactory entityManagerFactory = new EntityManagerFactory(GroupEntityManager.class, smartGroupEntityManager());return entityManagerFactory;}public EntityManagerFactory membershipEntityManagerFactory(){EntityManagerFactory entityManagerFactory = new EntityManagerFactory(MembershipEntityManager.class, smartMembershipEntityManager());return entityManagerFactory;}@Beanpublic ExtProcessEngineConfiguration engineConfiguration(){ExtProcessEngineConfiguration engineConfiguration = new ExtProcessEngineConfiguration();engineConfiguration.setDatabaseSchemaUpdate("true");engineConfiguration.setDataSource(dataSource);engineConfiguration.setTransactionManager(transactionManager);List<SessionFactory> customSessionFactories = new ArrayList<>();customSessionFactories.add(userEntityManagerFactory());customSessionFactories.add(groupEntityManagerFactory());customSessionFactories.add(membershipEntityManagerFactory());engineConfiguration.setCustomSessionFactories(customSessionFactories);return engineConfiguration;}}

其中核心的代码是:

@Beanpublic ExtProcessEngineConfiguration engineConfiguration()

这个方法。

其中有一个重点需要注意的地方是,在xml里面有一段:

<bean id="processEngine" factory-bean="processEngineConfiguration" factory-method="buildProcessEngine" />

这个是Spring使用实例工厂方法实例化Bean的一种方式,工作作流引擎Flowable的各个组件就是使用此方式实例化的。由于使用工厂实例化的Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。因此我们需要使用Spring Boot的方式来实例化Flowable的组件。有两种解决方法:

  1. 自定义FactoryBean,实现FactoryBean中的getObject这个方法,返回ProcessEngine对象
  2. 使用ProcessEngineFactoryBean,推荐使用这种方式,以下为ProcessEngineFactoryBean源码。
public class ProcessEngineFactoryBean implements FactoryBean<ProcessEngine> ..{...protected ProcessEngineImpl processEngine;public ProcessEngine getObject() throws Exception {initializeExpressionManager();initializeTransactionExternallyManaged();if (processEngineConfiguration.getBeans()==null) {processEngineConfiguration.setBeans(new SpringBeanFactoryProxyMap(applicationContext));}processEngine = (ProcessEngineImpl) processEngineConfiguration.buildProcessEngine();return processEngine;}...
}

ProcessEngineFactoryBean最终返回的是processEngine对象,repositoryService、runtimeService、formService等等组件都是通过processEngine里的getXX方法获得的。

通过WorkflowConfiguration就可以取代xml配置文件了。

在我们需要继承flowable-restApi的时候发现需要进行权限校验,我们可以通过下面的注解去掉security权限校验,在启动类上加上下面的注解:

@SpringBootApplication(exclude = {org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,org.flowable.spring.boot.SecurityAutoConfiguration.class})

Spring boot 集成工作流flowable去掉xml配置相关推荐

  1. spring boot分环境导出自定义xml配置

    背景介绍: 由于新的spring boot项目需要使用老的jar包,老的jar包的配置是用xml方式配置的,而且开发development.测试test.集成off.正式production环境都会有 ...

  2. Spring Boot集成Redis缓存之RedisTemplate的方式

    前言 Spring Boot 集成Redis,将自动配置 RedisTemplate,在需要使用的类中注入RedisTemplate的bean即可使用 @Autowired private Redis ...

  3. 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题

    为什么80%的码农都做不了架构师?>>>    如题,最近使用spring boot集成shiro,在shiroFilter要使用数据库动态给URL赋权限的时候,发现 @Autowi ...

  4. Linux 安装Redis-6.2.5,配置及使用(RDB与AOF持久化、sentinel机制、主从复制、Spring Boot 集成 Redis)

    CentOS 7 安装Redis-6.2.5版本 Redis采用的是基于内存的单进程 单线程模型 的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps 应用场景: 令牌(Toke ...

  5. Spring Boot 集成 Activiti7(工作流)

    Spring Boot 集成 Activiti7(工作流) 本章节将介绍 Spring Boot 集成 Activiti7(工作流).

  6. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

    1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...

  7. Flowable 6.6.0 BPMN用户指南 - (5)Spring Boot - 5.8 Flowable应用属性

    Flowable 6.6.0 用户指南相关文档下载 BPMN用户指南 第一部分 - 中文PDF精编版 BPMN用户指南 第二部分 - 中文PDF精编版 BPMN用户指南 第三部分 - 中文PDF精编版 ...

  8. Spring Boot 集成SnakerFlow流程引擎,简介、功能列表、详细解读、扩展点分析

    文章目录 简介 功能列表 流程定义 任务参与者 参与者设置 动态添加.删除参与者 组支持 详细解读 Spring Boot集成 表定义 表详细说明: 字段详细说明: 常见操作 常规API 综合查询 模 ...

  9. Spring Boot集成Hazelcast实现集群与分布式内存缓存

    2019独角兽企业重金招聘Python工程师标准>>> Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸 ...

最新文章

  1. JBL无所不能与IPhone4、IPad2的完美盛宴
  2. 海信电视root工具_海信璀璨系列家电:一次购买便能享受全方位智能家居生活...
  3. pl sql代码提示手动提示设置
  4. 实时帧数手机_RTX 3080 有多大升级必要?绝地求生帧数实测-RTX 3080 ——快科技(驱动之家旗下媒体)-...
  5. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商
  6. matlab初学者教程_初学者的Hibernate教程
  7. Python::OS 模块简介
  8. 南京工程学院《DSP技术及应用》期末试卷
  9. pyodbc-操作SQLserver
  10. 计算机控制面板设置密码,如何设置修改电脑的开机密码
  11. 收到了两家公司的offer怎么选择?
  12. 粒子系统-烟花效果的实现
  13. 词袋模型 matlab,【火炉炼AI】机器学习051-视觉词袋模型+极端随机森林建立图像分类器...
  14. 在sqli-liabs学习SQL注入之旅(第十一关~第二十关)
  15. linux 挂载以及初始化硬盘
  16. Weakly Supervised Deep Learning for Thoracic DiseaseClassification and Localization on Chest X-rays
  17. 关于印发《黑龙江省农村土地承包经营权确权登记试点工作操作规程(试行)》的通知
  18. 论 $*、$@、$*、$@的区别
  19. 程序员:一个女生不主动联系你还有机会吗?
  20. 数仓拉链表使用_如何用拉链炸弹捍卫您的网站

热门文章

  1. 第十七篇:获取 / 修改进程资源限制
  2. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...
  3. jenkin系列_调度jmeter实现分布式测试
  4. 使用U盘安装win7系统,遇到“无法定位现有系统分区”问题
  5. php stock 资料地址
  6. linux rar工具
  7. web前端开发工具整理
  8. ERP顾问在甲方好还是乙方好?
  9. 区块链技术之Fabric逻辑架构详解
  10. 深入理解Hadoop集群和网络