Activiti配置

Activiti配置

Activiti设计的配置相关的类继承关系如下图(Activiti6.0),核心的配置是最上层的抽象类ProcessEngineConfiguration,本文也是主要分析的这个抽象类。
在这里插入图片描述
分析ProcessEngineConfiguration主要从下面几个点进行解读:

  1. 创建ProcessEngineConfiguration对象;
  2. 创建processEngine流程引擎对象;
  3. 一些重要的配置;

创建ProcessEngineConfiguration对象

ProcessEngineConfiguration提供了7种静态方法去获取ProcessEngineConfiguration流程引擎配置对象,inputstream的方式基本不用,我们看看default、resource和StandaloneInMem这三种构造方式。

  1. default

    return createProcessEngineConfigurationFromResource("activiti.cfg.xml", "processEngineConfiguration");
    

    默认的这个方式,其实也是通过resource的方式去创建,指定了文件名和bean名。

  2. resource

    resource提供了几种重载的方式,最后都调用同一个方法,BeansConfigurationHelper.parseProcessEngineConfigurationFromResource(resource, beanName);

    进去看这个源码,发现这个就是基于Spring的方式去解析资源文件,并通过getBean的方式去获取到了ProcessEngineConfiguration对象

    public class BeansConfigurationHelper {
    
      public static ProcessEngineConfiguration parseProcessEngineConfiguration(Resource springResource, String beanName) {
          //beanFactory
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);//xmlBeanDefinitionReader
        xmlBeanDefinitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
        xmlBeanDefinitionReader.loadBeanDefinitions(springResource);
        ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) beanFactory.getBean(beanName);//getBean获取对象
        processEngineConfiguration.setBeans(new SpringBeanFactoryProxyMap(beanFactory));
        return processEngineConfiguration;
      }
    }
    
  3. StandaloneInMem

    该构造方法是return new StandaloneInMemProcessEngineConfiguration();StandaloneInMemProcessEngineConfiguration的继承关系如下图,其构造方法如下,跟踪源码最后调用了ProcessEngineConfiguration的无参构造方法,只是在构造完成之后,有设置了数据库为h2内存数据库,并设置了databaseSchemaUpdate=DB_SCHEMA_UPDATE_CREATE_DROP

在这里插入图片描述

public StandaloneInMemProcessEngineConfiguration() {
  this.databaseSchemaUpdate = DB_SCHEMA_UPDATE_CREATE_DROP;
  this.jdbcUrl = "jdbc:h2:mem:activiti";
}

创建processEngine流程引擎对象

ProcessEngineConfiguration创建processEngine对象的方法是buildProcessEngine,但在ProcessEngineConfiguration是一个抽象类,具体的实现在其子类ProcessEngineConfigurationImpl中。

@Override
public ProcessEngine buildProcessEngine() {
  init(); //init方法 重要的初始化方法
  ProcessEngineImpl processEngine = new ProcessEngineImpl(this);

  // trigger build of Activiti 5 Engine
  if (isActiviti5CompatibilityEnabled && activiti5CompatibilityHandler != null) {
    Context.setProcessEngineConfiguration(processEngine.getProcessEngineConfiguration());
    activiti5CompatibilityHandler.getRawProcessEngine();
  }

  postProcessEngineInitialisation();

  return processEngine;
}

其中init方法中涉及了许多初始化的工作,包括(以下部分内容):

  • 初始化所有的配置对象 initConfigurators
  • init前置方法 configuratorsBeforeInit
  • 初始化图形解析器 initProcessDiagramGenerator
  • 初始化历史等级 initHistoryLevel
  • 初始化bean initBeans
  • 初始化form引擎、service
  • init后置方法 configuratorsAfterInit

在init方法执行之后,就会new ProcessEngineImpl(this)来new一个ProcessEngineImpl对象,这样就获取到了一个看ProcessEngineImpl对象。跟踪ProcessEngineImpl的构造方法,对ProcessEngineImpl的一系列service等进行了赋值,也就是基于配置对这些Service进行了创建,后面调用的时候就可以通过processEngine.getXXService来使用了。

在这里插入图片描述

一些重要的配置

  1. DB_SCHEMA_UPDATE设置

有三个值

  • false:启动时检查数据库版本,不匹配抛异常(生成环境)
  • true:启动时检查,并进行更新(开发环境)
  • Create-drop:启动时创建数据库表,结束时删除(demo)
  1. 数据库和连接池

    Activiti默认使用H2内存数据库(H2数据库是纯java写的,只有一个jar包,多用于嵌入式)。也支持mysql、oracle、db2等。Activiti中processEngineConfigurationImpl的init方法有一个initDataSource的方法,该方法会进行数据库的初始化操作,主要是 jdbcUrl、jdbcDriver、jdbcUsername、jdbcPassword等,并设置了最大连接数、空闲连接数等参数。

    连接池默认是用mybatis的连接池,但是生成一般不用,性能差,Activiti支持dataSource和jdbc形式的数据库连接池,包括druid、dbcp、hikariCP等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值