【Activiti 基础篇二】与数据库的交互
上篇主要讲述的是对于Activiti的一个初步介绍以及插件的安装,本篇则学习一下一个Activiti强大的数据库操作,对于一个Activiti来说,不管其简单复杂,他都是通过23张表来管理你整个的流程,以Mysql为例,创建说明:
创建数据库,前提条件是已经引入了Activiti和MySql使用的Jar包,我们可以直接定义一个方法来完成这个操作:
首先第一步我们要创建一个流程引擎对象,因为只是应用于一次,所以我们创建一个单例的流程引擎
// 创建一个单例的流程引擎对象
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
第二步则是连接操作,数据库连接操作4大步:
// 定义连接mysql数据库
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
configuration
.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0109Activiti?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("123");
第三步,因为是创建数据库,所以采用ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE的方式来操作
/*
* public static final String DB_SCHEMA_UPDATE_FALSE = "false";
* //操作23张表的时候,如果表不存在,就抛出异常,不能自动创建23张表
*
* public static final String DB_SCHEMA_UPDATE_CREATE_DROP =
* "create-drop"; //每次操作,都会先删除表,再创建表
*
* public static final String DB_SCHEMA_UPDATE_TRUE = "true";
* //如果表不存在,就创建表,如果表存在,就直接操作
*/
configuration
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// Activiti核心对象(流程引擎)
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println("processEngine:" + processEngine);
进行到此为止,你打开自己MySQL数据库则可以看见Activiti的23张表,这样也就完成了数据库的创建。当然我们完全可以采用XML的方式来完成我们想要的操作,毕竟这样写局限性太大了。我们可以把这些信息全部平移到xml文件中,然后通过ProcessEngineConfiguration的方法来读取XML文件就可。
activiti.cfg.xml文件的代码:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="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-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 查找单例流程引擎的路径作为class值 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--数据库的连接操作,注意连接符"&"必须要转义"amp;" -->
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/itcast0109Activiti?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="123"></property>
<!-- true没有表就创建表,有表就直接操作 -->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
读取xml文件:
ProcessEngineConfiguration configuration=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine processEngine=configuration.buildProcessEngine();
其实说白了就是一种方式,第一种便于我们demo实现,而第二种则是更方便的用于我们的项目开发中。本篇介绍到此结束,下面是常用的一些表的信息查询与注释,
- 与部署对象和流程定义相关的表
- SELECT * FROM act_re_deployment #部署对象表
- SELECT * FROM act_re_procdef #流程定义表
- SELECT * FROM act_ge_bytearray #存放资源文件
- 流程实例,执行对象,任务相关的表
- SELECT * FROM act_ru_execution #正在执行的执行对象表
- SELECT * FROM act_hi_procinst #流程实例的历史表(一个流程启动,该表中就只有一个数据,表示流程实例
- SELECT * FROM act_ru_task #正在执行的任务表(只有任务节点(UserTask),该表中才有数据
- SELECT * FROM act_hi_taskinst #任务的历史表
- SELECT * FROM act_hi_actinst #所有活动的历史表(包括所有的节点)
- 流程变量
- SELECT * FROM act_ru_variable #正在执行的流程变量表
- SELECT * FROM act_hi_varinst #历史的流程变量表
这些也只是一些皮毛而已,并且读取XMl文件的方式有很多种,需要我们慢慢深入。