流程引擎activiti的使用心得

本文介绍了使用Activiti 5.16.0版本流程引擎的实际经验,包括数据库配置、业务数据处理、流程监听、单元测试及异常处理等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在开发流程相关的项目,因此使用了行业中比较成熟的流程引擎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来进行统一的异常处理

@ControllerAdvice
public 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 是一款轻量级的工作流和业务流程管理 (BPM) 平台,专为开发人员设计。它能够帮助企业实现复杂的业务逻辑自动化,从而提高运营效率并减少人为错误。 ### 部署 BPMN 模型 为了部署一个新的 BPMN 模型至 Activiti 引擎,可以利用 `repositoryService` 提供的方法: ```java // 创建新的部署对象,并关联特定租户ID后发布模型 repositoryService.createDeployment() .addBpmnModel(name, bpmnModel) .tenantId("ceshibo") .deploy(); ``` 此代码片段展示了如何通过编程方式向 Activiti 中添加自定义的 BPMN 文件[^1]。 ### 使用 Activiti Modeling App 进行可视化建模 对于希望采用图形界面来进行流程设计的情况,官方提供了一个名为 **Activiti Modeler** 的应用程序。安装完成后,在本地服务器环境下可通过指定URL (`http://localhost:8080`) 访问该工具进行交互式操作[^2]。 ### 数据库结构概述 当涉及到持久层时,Activiti 利用了 MyBatis3 作为其ORM框架处理数据库交互事务。具体来说,所有由 Activiti 所产生的表格均以前缀 "ACT_" 开始命名;其中几个重要类别如下所示: - **ACT_RE_*** 表保存了有关已注册流程的信息; - **ACT_ID_*** 维护参与者的身份资料; - **ACT_HI_*** 跟踪已完成活动的历史轨迹; - **ACT_GE_*** 收集全局属性和其他辅助性的元数据[^3]. ### 最佳实践建议 针对那些打算长期投入使用的项目而言,遵循某些指导原则可以帮助确保系统的稳定性和可维护性: - 尽可能早地规划好整个生命周期内的需求变更路径。 - 对于复杂度较高的场景考虑引入版本控制系统以便追踪修改历史。 - 定期备份生产环境下的数据库以防意外丢失关键信息。 - 积极参与到社区交流活动中去获取最新资讯和技术支持。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值