activiti入门系列文章14 - 集成规则引擎drools
activiti如何集成规则引擎drools呢
三个步骤:
1、pom加入依赖,activiti引擎集成部署器
1、首先进行drools规则编写、然后挂到流程图节点上
2、进行规则文件和bpmn流程文件的部署
例以下:
规则引擎部署器集成activiti
pom加入依赖:
<dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.0.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.0.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>knowledge-api</artifactId><version>6.5.0.Final</version></dependency>
2、activiti引擎配置集成
List<> list=new ArrayList();
list.add(org.activiti.engine.impl.rules.RulesDeployer);
processEngineConfiguration.setCustomPostDeployers(list);
3、bpmn文件配置规则节点
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"targetNamespace="http://www.activiti.org/test"><process id="leave" name="请假审批" isExecutable="true"><startEvent id="startevent1" name="Start"></startEvent><endEvent id="endevent1" name="End"></endEvent><userTask id="usertask1" name="部门经理审批"></userTask><businessRuleTask id="businessruletask1" name="天数判断" activiti:ruleVariablesInput="${leave}" activiti:rules="leave1,leave2" activiti:resultVariable="reason"></businessRuleTask><serviceTask id="servicetask1" name="获取变量" activiti:class="com.1json.service.DroolsService"></serviceTask><userTask id="usertask2" name="HR审批"></userTask><sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow><sequenceFlow id="flow2" sourceRef="usertask1" targetRef="businessruletask1"></sequenceFlow><sequenceFlow id="flow3" sourceRef="businessruletask1" targetRef="servicetask1"></sequenceFlow><userTask id="usertask3" name="总经理审批"></userTask><sequenceFlow id="flow4" sourceRef="servicetask1" targetRef="usertask3"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${reason[0].total >= 10}]]></conditionExpression></sequenceFlow><sequenceFlow id="flow5" sourceRef="servicetask1" targetRef="usertask2"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${reason[0].total < 10}]]></conditionExpression></sequenceFlow><sequenceFlow id="flow6" sourceRef="usertask3" targetRef="usertask2"></sequenceFlow><sequenceFlow id="flow7" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow></process>
</definitions>
其中
<businessRuleTask id="businessruletask1" name="天数判断" activiti:ruleVariablesInput="${leave}" activiti:rules="leave1,leave2" activiti:resultVariable="reason"></businessRuleTask>
配置了规则引擎节点的参数:输入参数变量${leave},规则集合activiti:rules="leave1,leave2". 规则计算结果值保存到reason变量里
4、drl规则文件代码
package com.1json;
import com.1json.model.Leave;
rule "leave1"whenu : Leave(day < 3);thenu.setTotal(u.getDay() + 2);
end
rule "leave2"whenu : Leave(day >= 3);thenu.setTotal(u.getDay() + 5);
end
5.部署并访问
@RequestMapping("/drl")public void drl() {/*** 注意这里:必须要把drl文件一起deploy*/DeploymentBuilder deploy = repositoryService.createDeployment();deploy.addClasspathResource("leave.bpmn").addClasspathResource("leave.drl");deploy.deploy();ProcessInstance pi = runtimeService.startProcessInstanceByKey("leave");Map<String, Object> vars = new HashMap<String, Object>(); vars.put("leave", new Leave("1json", 12));/*** 当前任务*/List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();for(Task task : tasks){System.out.println(task.getId() + " , " + task.getName());taskService.complete(task.getId(), vars);}/*** 下一步任务*/tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();for(Task task : tasks){System.out.println(task.getId() + " , " + task.getName());}}
Activiti社区交流群:839915498
更多activiti系列教程:activiti教程
activiti入门系列文章14 - 集成规则引擎drools相关推荐
- drools规则引擎可视化_Springboot2(60)集成规则引擎Drools
核心pom.xml 文件: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...
- 崛起于Springboot2.X之集成规则引擎Drools(41)
为什么80%的码农都做不了架构师?>>> 1.创建Springboot项目,勾选Web模块和lombok插件 2.添加pom其他依赖 <dependency>< ...
- activiti入门系列文章9 - 委派与转办
委派与转办 1.委派 委派:是将任务节点分给其他人处理,等其他人处理好之后,委派任务会自动回到委派人的任务中 将hr的任务进行委派: taskService.delegateTask(taskId, ...
- 规则引擎drools系列(一)
规则引擎 Drools 1. 问题引出 现有一个在线申请信用卡的业务场景,用户需要录入个人信息,如下图所示: //此处为伪代码 //检查用户信息合法性,返回true表示检查通过,返回false表示 ...
- Oracle APEX 系列文章14:Oracle APEX 18.1 Docker 镜像
本文是钢哥的 Oracle APEX 系列文章的第14篇,完整文章目录如下: - Oracle APEX 系列文章01:Oracle APEX, 让你秒变全栈开发的黑科技 - Oracle APEX ...
- 三、美团大众点评CAT监控系列文章---Springboot集成CAT并实现邮件告警
文章目录 一.配置过程 二.相关的参考文档 三.系列文章 一.配置过程 登录自己的cat服务端 默认登录用户名和密码都是 catadmin添加一个监控规则: 如下面的监控规则就是说,如果在一分钟以内访 ...
- saltstack之基础入门系列文章简介
使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结. saltstack的前六篇 ...
- 规则引擎 Drools
规则引擎 Drools 文章目录 规则引擎 Drools 1. 问题引出 2. 规则引擎概述 2.1 什么是规则引擎 2.2 使用规则引擎的优势 2.3 规则引擎应用场景 2.4 Drools介绍 3 ...
- 别再说你不会,规则引擎Drools了
一.为什么要使用规则引擎 有一天运营想弄一个积分策略,计算额外积分金额 ,规则如下: 订单原价金额 100以下, 不加分: 100-500 加100分: 500-1000 加500分: 1000 以上 ...
最新文章
- CentOS下创建配置RAID1
- 数据结构---判断一棵树是否是二叉搜索树
- LAMP平台架构浅析
- Poj 1936,3302 Subsequence(LCS)
- 数据结构线性表的三个属性
- wsimport 的使用问题
- 线程同步 互斥量(mutex) Linux函数
- 面试官常问的web前端问题大全(10道面试真题祝你旗开得胜)
- css字体浏览(转)
- leetcode题解持续更新
- 移植 μC/OS-III 到 STM32
- 井下各种压力概念及相互关系
- 基于帕累托最优的多目标SNP选择
- 凸优化1——仿射集、凸集、锥
- TestCenter测试管理工具安装和卸载(B)
- qt 子线程(多线程)更新gui的几种方法
- 2021年中国马铃薯种植生产情况及机械化程度分析:单产面积不断扩大,四川省产量居全国首位[图]
- 【代码审计-JAVA】javaweb代码审计思路
- The Lion and the Unicorn: Socialism and the English Genius--PartⅠ
- 简单制作一个网页需要注意的
热门文章
- 为什么三进制计算机没有商业化?
- ST-Norm: Spatial and Temporal Normalization for Multi-variate Time Series Forecasting(KDD2021)
- stm32 独立看门狗时钟配置
- 微信4月份最新封号新规(重要)
- 生意参谋2019-01-22日之后指数该怎么还原?
- 免费erp到底能不能用?
- matlab中进行太阳能电池模型,基于Matlab╱Simulink的太阳能电池特性仿真
- DropDownList详解
- Linux下载及配置
- 2018年云南省三校生计算机考试大纲,云南省2018年三校生高考铁道运输类专业技能考核大纲...