流程引擎activiti的使用心得
来源:互联网 发布:c语言两个指针相减 编辑:程序博客网 时间:2024/05/21 09:34
最近在开发流程相关的项目,因此使用了行业中比较成熟的流程引擎activiti。
自己的英文水平有限,因此找了一个具有中文文档的版本5.16.0。
activiti相关的文档呢,我就不赘述了,直接看文档:http://www.mossle.com/docs/activiti/index.html
只在此记录下开发过程中遇到的问题及相关的一些经验,和大家一起讨论分享。
一、activiti数据库
activiti5.16中会使用到他自己创建的24张表,以前都是我们自己手动创建的,其实可以修改配置文件进行自动创建。
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="processEngineName" value="spring"></property> <property name="dataSource" ref="dataSource_activiti" /> <property name="transactionManager" ref="transactionManager_activiti" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> </bean>
只有把上面的databaseSchemaUpdate设置成true就不用手动创建24张表了。二、业务数据
一般来说自己的项目都会有自己的业务,因此我们会创建自己的业务数据库用于存储自己的业务,其实activiti完全可以把我们的业务数据序列化保存到他的数据库中,
可以通过activiti提供的taskService,historySevice等接口查询我们的业务数据,因此如果只是简单的要求,完全可以不用创建自己的业务数据库。
但我们的项目要求要进行一些业务相关的查询和统计,其实大多数项目都会有这种要求,因此我还是建议创建自己的业务数据库。
在创建自己的业务数据库时,为了以后查询的方便和效率,建议把流程相关的数据(比如task的创建、领取、结束时间等等)可以同步到自己的业务数据库,这样到
时统计时间相关的数据时,就不会存在着跨数据库查询,方便些同时效率也会高些。
由于我们使用的数据库是postgresql,其实还可以将activiti的数据库和业务数据库放到同一数据库的不同的schema下,这样方便万一要使用跨表查询时,使用schema
通信会比较方便。
三、流程监听
activiti的监听功能其实很强大的,我们的项目中的业务逻辑都可以写到监听中。在流程图bpmn中节点添加监听,在listener中去存储业务数据。
四、单元测试
由于领取任务时都需要手动填写userId以及taskId,给我们的测试造成很大的不方便,因此我们可以通过taskSevice查询出相关的数据,然后自动设置,实现自己测试。
/** * * 描述获取taskId以及userId * */protected void getTaskInfo(){//目前都只有一个任务Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).list().get(0);//必须有值,都取第一个IdentityLink identityLink = taskService.getIdentityLinksForTask(task.getId()).get(0);taskid = task.getId();userid = identityLink.getUserId();}五、异常处理
使用spring4中的ControllerAdvice来进行统一的异常处理
@ControllerAdvicepublic class xxxHandler {private static final Logger LOGGER = Logger.getLogger(xxxHandler.class);@ExceptionHandler(ActivitiException.class)public String xxxHandler(ActivitiException exception){logger("xxx", exception);return JsonUtil.toJson("xxx");}@ExceptionHandler(RuntimeException.class)public String xxxHandler(RuntimeException exception){logger("xxx", exception);return JsonUtil.toJson("xxx");}private void logger(String msg,Exception e){LOGGER.error(TimeUtil.getNow()+msg);LOGGER.error(e.getMessage(), e);}}
六、日志记录
我们需要把项目抛出异常时记录下相关的日志,方便我们后期运维,因此使用AOP对此进行记录日志。
项目还没有做完,后面会更新。
- 流程引擎activiti的使用心得
- activiti 流程引擎的API和服务
- Activiti流程引擎的API和服务
- Activiti工作流引擎的使用
- Activiti流程引擎介绍
- activiti流程引擎配置
- activiti流程引擎
- Activiti流程引擎配置
- Activiti工作流引擎使用(Activiti的乱码问题)
- Activiti 工作流引擎的初步使用
- activiti入门2流程引擎的API和服务基础
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- Activiti工作流引擎使用
- pydicom 安装
- PowerDesigner中NAME和COMMENT的互相转换
- 排序算法总结
- 目标检测与分类学习之路----opencv人脸检测识别(zero)
- python 操作字符串
- 流程引擎activiti的使用心得
- 解决:centos7镜像创建的容器里面安装服务后,无法使用命令启动服务
- 剑指offer--python
- 求最大子数组和
- html5新增标签的低版本 浏览器兼容
- spring自动装配
- nodejs的package.json依赖dependencies中 ^ 和 ~ 的区别
- input每四位数增加-
- sqlServer数据库导入.bak文件时出现的各种错误总结