Activiti流程引擎对象及配置原理解析
流程引擎对象和其配置对象都是activiti的核⼼对象
⼀、activiti的简单使⽤流程
activiti在⼯作时,⼀般有以下⼏个步骤:
创建⼀个流程引擎配置对象ProcessEngineConfiguration对流程引擎进⾏配置
通过流程引擎配置对象来获取流程引擎对象ProcessEngine
通过流程引擎对象来部署流程图
启动流程
⼆、流程引擎配置对象ProcessEngineConfiguration的介绍
activiti⽤ProcessEngineConfiguration对象来配置流程引擎。ProcessEngineConfiguration类提供了多个创建该类对象的静态⽅法,可以读取相应的配置⽂件,返回ProcessEngineConfiguration实例。通过该类中提供的getter和setter⽅法可以对流程引擎配置对象进⾏配置。
三、activiti配置⽂件的介绍
activiti创建流程引擎配置对象时需要⼀个配置⽂件,
<beans xmlns="/schema/beans"
xmlns:context="/schema/context"
xmlns:tx="/schema/tx"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd
/schema/context /schema/context/spring-context-2.5.xsd
/schema/tx /schema/tx/spring-tx-3.0.xsd">
<!-- 配置使⽤默认bean名称的流程引擎配置对象 -->
<bean id="processEngineConfiguration"createprocessa
class="ine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="sql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root"></property>
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
仔细观察这个配置⽂件,这其实是⼀个spring的配置⽂件,在其中配置了⼀个ProcessEngineConfiguration类的bean,然后在代码中就可以读取这个配置⽂件,获取这个bean。
processEngineConfiguration这个bean要注⼊的属性:
(1)数据库连接相关的属性
(2)databaseSchemaUpdate,数据库策略,
false:默认值,设置为该值,activiti在启动时如果数据库中没有表或者版本不匹配,会抛出异常
true:启动时会对所有表进⾏更新,如果没有表就会⾃动创建表
create-drop: 启动时创建表,关闭时删除表
针对其中的数据库连接相关的属性,我们还可以在这个配置⽂件中再配置⼀个数据源,在这⾥引⽤数据源的bean
<!-- 配置连接池 -->
<bean id="dataSource" class="hange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="sql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
四、获取流程引擎配置对象
4.1 读取默认名称的配置⽂件来创建配置对象
所以如果在resources⽬录下给定⼀个l配置⽂件,在其中创建⼀个名为processEngineConfiguration的bean,在程序中调⽤这个⽅法就可以得到流程引擎配置对象。
/**
* ⽤ateProcessEngineConfigurationFromResourceDefault()
* 创建流程引擎配置对象
*/
@Test
public void test1() {
ProcessEngineConfiguration configuration = ateProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration);
}
4.2 读取⾃定义名称的配置⽂件来创建流程引擎配置对象
@Test
public void test2() {
ProcessEngineConfiguration configuration = ateProcessEngineConfigurationFromResource("l", "processEngineConfiguration");    System.out.println(configuration);
}
五、流程引擎对象
ProcessEngine,流程引擎对象,是activiti的核⼼对象之⼀,使⽤该对象来部署流程。
要获取该对象时,需要先获取ProcessEngineConfiguration 流程引擎配置对象来对流程引擎进⾏配置,然后通过这个配置对象来获取流程引擎对象。下⾯说明下如何获取流程引擎对象
5.1 buildProcessEngine⽅法创建
这个⽅法是ProcessEngineConfiguration类的实例⽅法,该⽅法返回⼀个已经配置好的流程引擎对象
@Test
public void testCreateProcessEngine() {
ProcessEngineConfiguration configuration = ateProcessEngineConfigurationFromResourceDefault();
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);
}
5.2 ⽤ProcessEngines类来获取
activiti在ProcessEngines类中也提供了创建流程引擎对象的⽅法,这是⼀个创建和关闭流程引擎的⼯具类,所有创建的(包括使⽤其他⽅式创建
的)ProcessEngine实例都会被注册到ProcessEngines中,实际上是在该类中维护了⼀个Map对象,key为ProcessEngine实例的名称,value为ProcessEngine实例。
5.2.1使⽤ProcessEngines.init()⽅法获取
ProcessEngines的init⽅法,会读取activiti的默认配置⽂件,即classpath下的l⽂件,并将创建的流程引擎实例缓存到map中,该⽅法会在map中创建key=default的ProcessEngine对象,
然后我们就可以先获取到这个map,然后从map中获取key=defalut的流程引擎对象。
@Test
public void testCreateProcessEngine2() {
//读取配置⽂件,创建流程引擎对象缓存到map中
ProcessEngines.init();
//获取map
Map<String, ProcessEngine> enginesMap = ProcessEngines();
//获取key为default的对象
ProcessEngine processEngine = ("default");
System.out.println(processEngine);
}
5.2.2 使⽤getDefaultProcessEngine()⽅法获取
ProcessEngines的getDefaultProcessEngine()⽅法,会返回缓存map中的key为default的流程引擎对象,如果这个map还没有进⾏初始化,该⽅法就会先调⽤ProcessEngines.init()⽅法初始化缓存map,然后再获取key为default的流程引擎对象。
@Test
public void testCreateProcessEngine3() {
ProcessEngine defaultProcessEngine = DefaultProcessEngine();
System.out.println(defaultProcessEngine);
}
⽐较以上的⼏种创建流程引擎的⽅式,我们⼀般选择DefaultProcessEngine()⽅法来获取,
因为这种⽅式最简单,只需要提供⼀个使⽤默认名称的配置⽂件l,在其中做好对流程引擎的配置
然后我们就可以直接获取流程引擎对象。
六、总结
以上介绍了activiti中的两个核⼼对象,流程引擎配置对象和流程引擎对象,以及如何获取这两个对象。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。