activiti学习第一天
公司项目组在考虑工作流,首选了activiti,首先我们要明确为什么要使用activiti,有什么好处。
在工作中有些项目会用到工作流,如果简单的项目,我们就无需使用类似activiti、jbpm等工作流框架。因为原本项目就简单,几个简单的流程,我们完全可以自己去写逻辑实现功能。但当如果有复杂的工作流程,而且流程极容易发生变化,相信每个程序员都很烦业务逻辑发生改变,抱怨为什么当初说好了,现在又变。没办法,我们的客户就是这么善变,而且客户是上帝,我们的衣食父母。而引入了activiti等类似的流程框架引擎后,我们就不用再去关心流程的维护,只关心我们的逻辑即可。
在这里总结一下,如果项目简单,流程不会频繁的发生变化,那么我们就可以自己写流程,完成基本功能,如果流程复杂,而且极容易发生变化,那么我们就应该考虑引入现成的流程框架引擎了。
下面我们开始我们的activiti之旅吧。
第一步,如果我们想使用activiti,那么肯定离不开jar,java就是离不开jar。我们需要jar里面的接口完成我们所需要的功能,而jar又做了什么操作呢,当然是对数据库进行基本的读写操作了。activiti支持很多数据库的。
第二步,activiti流程定义,使用了BPMN2.0标准(最终就是一个xml)。而且activiti提供了流程建模工具。但是activiti的建模工具对eclipse的版本有要求,官网明确的写着(If you would like to use the Activiti Designer then you need Eclipse Kepler or Luna),所以我们需要下载Kepler或者Luna版本。其他版本是无法使用activiti designer插件的。下面是两个版本的官网地址:
https://www.eclipse.org/kepler/
下载完后可以安装activiti designer插件了。
开始创建数据库吧,首先我们使用测试的方式创建数据库
activiti需要spring的支持,spring帮助activiti创建了很多activiti需要使用的bean。
如果连接数据库,那肯定是需要数据源的,创建一个文件名为activiti.cfg.xml的配置文件,里面定义一个数据源,然后定义一个流程引擎配置bean。下面是xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/newlife" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- activiti数据库表处理策略 -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
可以看到上面的约束都是spring的,在这里注意了,数据库是很早之前安装的,所以是mysql 5.5.5版本,而最新版的jdbc连接驱动更改了名 com.mysql.cj.jdbc.Driver 是用来连接mysql 6.x.x版本的,所以我下载了一个之前版本的jdbc驱动包
我这里数据库名称为newlife,所以要注意在mysql中新建一个这个数据库
下面我们来执行以下流程引擎,它就会为我们自动创建activiti所需要的所有表
@Test
public void createDB() throws SQLException, ClassNotFoundException{
String resource="activiti.cfg.xml";
ProcessEngineConfiguration configuration=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
ProcessEngine engine=configuration.buildProcessEngine();
}
我们看一下数据库,是不是多了很多的表呢

下面我们来说一下基本的表结构用处
所有的表都以act开头,当然应该是activit的简写。中间re的为repository,代表资源文件。ru的为runtime,这是运行时表,包含流程实例,任务,变量,异步任务等。这些表只保存流程中的数据,当流程结束,这些数据会进行删除操作,这样保持了这些表中的数据最小化,提高效率。id表示identity,表示身份信息,比如用户,组等。
hi历史表,流程中的数据会移动到这些表中,也就是保存历史流程。ge表示general,表示通用数据。
今天的记录就到这里,接下来会结合流程的部署、发布流程实例查看数据库中的数据,以了解数据库中的字段都代表什么意思。
activiti学习第一天的更多相关文章
- Activiti学习——Activiti与Spring集成
转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...
- activiti学习5:开启流程和流程前进
目录 activiti学习5:开启流程和流程前进 一.流程和任务的关系 二.开启流程 2.1根据流程定义key开启流程 三.查询用户任务 3.1 TaskQuery 四.完成任务 activiti学习 ...
- activiti学习2:示例工程activiti-explorer.war的使用
目录 activiti学习2:示例工程activiti-explorer.war的使用 一.搭建开发环境 二.运行示例工程 三.示例工程功能演示 1. 创建流程图 2. 部署流程图 3. 启动流程 4 ...
- activiti学习笔记一
activiti学习笔记 在讲activiti之前我们必须先了解一下什么是工作流,什么是工作流引擎. 在我们的日常工作中,我们会碰到很多流程化的东西,什么是流程化呢,其实通俗来讲就是有一系列固定的步骤 ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- YII2学习第一天
YII2学习第一天,之前稍微看了看TP,感觉和自己的理念不是很符合,然后转学YII2了. 使用的文档是https://github.com/yiisoft/yii2/tree/master/docs/ ...
- Java学习第一天
Java学习第一天 对于网络管理员或者黑客必须知道的八个cmd命令 详情请参考:http://www.2cto.com/os/201608/533964.html nbtstat ...
- 一、Android学习第一天——环境搭建(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第一天——环境搭建 Android 开发环境的搭建 ...
- web学习第一章
web学习第一章 我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...
随机推荐
- HDU 4010 Query on The Trees(动态树)
题意 给定一棵 \(n\) 个节点的树,每个点有点权.完成 \(m\) 个操作,操作四两种,连接 \((x,y)\) :提 \(x\) 为根,并断 \(y\) 与它的父节点:增加路径 \((x,y)\ ...
- UnicodeMath编码教程
目录 1. 简介 2. 编码简单数学表达式 2.1 分数 2.2 上标和下标 2.3 空白(空格)字符使用 3. 编码其他数学公式 3.1 open/close分隔符 关于大括号方程组(cases) ...
- CSS基础学习(二) 之 width min-width max-width属性
width 1. 设置元素内容区(content area)的宽度. 2. 如果box-szing属性设置为border-box,width表示border area的宽度,如下图 min-width ...
- 【SMTP】常见错误码
'* 邮件服务返回代码含义 '* 500 格式错误,命令不可识别(此错误也包括命令行过长) '* 501 参数格式错误 '* 502 命令不可实现 '* 503 错误的命令序列 '* 504 命令参数 ...
- CSS自定义样式
CSS自定义样式 1. 自定义字体 先将字体文件放到web服务器上,需要时自动下载到用户计算机上 属性:@font-face 例: @font-face{ font-family:myFont; sr ...
- 读写方式 r , r+ , w , w+ , a , a+
r只读,r+读写,不创建:r+:可读可写,若文件不存在,报错 w如果文件已经存在,则不替换: w 就是打开文件,文件如果不存在,就会新建一个文件: w+: 可读可写,若文件不存在,创建 信息来源:ht ...
- 『TensorFlow』读书笔记_进阶卷积神经网络_分类cifar10_上
完整项目见:Github 完整项目中最终使用了ResNet进行分类,而卷积版本较本篇中结构为了提升训练效果也略有改动 本节主要介绍进阶的卷积神经网络设计相关,数据读入以及增强在下一节再与介绍 网络相关 ...
- 查看局域网指定IP的电脑名
nbtstat -a 192.168.0.139 节点 IP 址址: [192.168.0.140] 范围 ID: [] NetBIOS 远程计算机名称表 名称 类型 状态 ------------- ...
- js禁止页面滚动
开发移动端页面的时候有一个很比较常见的需求,在出现弹窗时,禁止滑动弹窗后面的主体页面.如何实现呢,往下看 js实现整个页面禁止滚动: document.body.addEventListener('t ...
- react-thunk的使用流程
react-thunk作用:使我们可以在action中返回函数,而不是只能返回一个对象.然后我们可以在函数中做很多事情,比如发送异步的ajax请求. 这就是react-thunk的使用方法.接受一个d ...