工作流的学习(四)

这章我主要记录一下自己遇到的问题和总结。

(1)activiti的配置中,对于history的配置是可以优化的。

历史信息级别可以配置成以下几种:

  • none: 忽略所有历史存档。这是流程执行时性能最好的状态,但没有任何历史信息可用。

  • activity: 保存所有流程实例信息和活动实例信息。 在流程实例结束时, 最后一个流程实例中的最新的变量值将赋值给历史变量。 不会保存过程中的详细信息。

  • audit: 这个是默认值. 它保存所有流程实例信息, 活动信息, 保证所有的变量和提交的表单属性保持同步 这样所有用户交互信息都是可追溯的,可以用来审计。

  • full: 这个是最高级别的历史信息存档,同样也是最慢的。 这个级别存储发生在审核以及所有其它细节的信息, 主要是更新流程变量。

(2)执行的任务的参数设置,尽可能的少设置几个属性,这对性能也有影响

Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
		Map<String, Object> variables = new HashMap<String, Object>();
		// 任务审批Key
		String taskApproveKey = getTaskApproveKey(task);
		// 审批不通过
		variables.put(taskApproveKey, Constants.IS_FALSE);
		taskService.setVariablesLocal(taskId, variables);

这里可以使用json的形式,将多个参数设置一个varible里面。通过测试,这里varible设置的越多,执行越慢。

(3)死锁问题

我出现的问题,是两个系统访问同一个activiti数据库,导致死锁。死锁的相关问题在我数据库死锁的文章中有。

解决的办法:1)可以写一个通用的activti服务,比如activiti相关的添加,删除,修改,查找等,多个系统访问这个服务,在服务上对锁加以控制。

2)对出现死锁的字段检查,没有索引的加索引,因为对于索引的查找是行锁,不是表锁。

3)重写Activiti的操作,不适用activiti jar包中的方法,(ibatis对于activti jar包中的select的使用默认没有加with(nolock),所以我们自己写方法,加上with(nolock),不过这种方法很麻烦,比较jar包封装了很多方法,添加一条任务的整个流程涉及到的表我们都要处理,这就要求很了解整个任务处理的过程)

(4)activiti性能问题

我的项目里主要是因为涉及到了两个数据库。将activiti的act_id_表都设计成了视图。这里主要是业务需要。而视图查找的是另一个数据库的表,所以在我们的项目中,工作流添加这块很慢。

后来我将这块做了修改,即将视图去掉,改为表,然后在项目中添加监听器,对涉及到这个表的修改的事件都添加监听,只要有事件发生,我就修改相关表,当然这也没提高多少,最多提高40%的性能。


(5)

		List<User> users = identityService
<span style="white-space:pre">				</span>.createNativeUserQuery()
<span style="white-space:pre">				</span>.sql("SELECT distinct [GROUP_ID_] as [ID_] FROM [Activiti].[dbo].[ACT_ID_MEMBERSHIP] with(nolock) WHERE GROUP_ID_ LIKE '"
<span style="white-space:pre">						</span>+ orgId + "_%'").list();

调用identityservice执行自己写的脚本,遇到问题:createNativeUserQuery的时候如果后面,select出多个字段,只有他的主键id_会有值,其他的属性即使as到user对应的属性,也不会有值。

我当时是想用membership里面的其他属性,可是就说一直查不到,因为直接执行脚本是有的,最后才发现直接这样除了主键有值,其他均为Null。

这块要特别注意。虽然查询其他各种表用这种方式都可以执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值