Spring boot整合Drools、flowable决策引擎解决方案

一、Drools:DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

官方文档:

https://docs.jboss.org/drools/release/6.5.0.Final/drools-docs/html_single/index.html

二、Spring 整合Drools示例:

  1. 项目依赖

2.规则文件

实体类

规则文件

   3. 操作符支持:

约束连接:对于对象内部的多个约束的连接,可以采用“&&”(and)、“||”(or)和“,”(and)来实现,“&&”(and)、“||”(or)和“,”这三个连接符号如果没有用小括号来显示的定义优先级的话,那么它们的执行顺序是:“&&”(and)、“||”(or)和“,” “&&”优先级最高,表面上看“,”与“&&”具有相同的含义,但是有一点需要注意,“,”与“&&”和“||”不能混合使用,也就是说在有“&&”或“||”出现的LHS 当中,是不可以有“,”连接符出现的,反之亦然。

比较操作符:在当中共提供了十二种类型的比较操作符,分别是:>、>=、<、<=、= =、!=、contains、not contains、memberof、not memberof、matches、not matches;

比较操作符contains 是用来检查一个Fact 对象的某个字段(该字段要是一个Collection或是一个Array 类型的对象)是否包含一个指定的对象。

when

$order:Order();

$customer:Customer(age >20, orders contains $order);

then

System.out.println($customer.getName());

End

contains 只能用于对象的某个Collection/Array 类型的字段与另外一个值进行比较,作为比较的值可以是一个静态的值,也可以是一个变量(绑定变量或者是一个global 对象)。

比较操作符memberOf 是用来判断某个Fact 对象的某个字段是否在一个集合(Collection/Array)当中,用法与contains 有些类似,但也有不同,memberOf 的语法如下:Object(fieldName memberOf value[Collection/Array])可以看到memberOf 中集合类型的数据是作为被比较项的,集合类型的数据对象位于memberOf 操作符后面,同时在用memberOf 比较操作符时被比较项一定要是一个变量(绑定变量或者是一个global 对象),而不能是一个静态值。

matches 是用来对某个Fact 的字段与标准的Java 正则表达式进行相似匹配,被比较的字符串可以是一个标准的Java 正则表达式,但有一点需要注意,那就是正则表达式字符串当中不用考虑“\”的转义问题

when

$customer:Customer(name matches "李.*");

then

System.out.println($customer.getName());

end

该规则是用来查找所有Customer 对象的name 属性是不是以“李”字开头,如果满足这一条件那么就将该Customer 对象的name 属性打印出来。

其他语法说明参考:https://blog.csdn.net/u012373815/article/details/53872025

4. 读取规则文件测试

结果:

总共触发了: 1 条规则

RequestTemplate(custId=330692, custName=上海诺基亚贝尔股份有限公司, signalCode=C-03ZQ-002-B, signalName=企业发行的债券有退市风险, signalId=IIONUUUs222991, judgment_result=负, judgment_amt=62388.0, fin_owner_interests=7223775.23, signalLevel=关注)

5. excel自定义决策表

6. 决策表语法

7. 读取excel生成规则文件

8. 直接读取excel处理业务规则

9. 内存加载规则文件

三、Flowable:  Flowable是一个流行的轻量级的采用Java开发的业务流程引擎。通过Flowable流程引擎,我们可以部署BPMN2.0的流程定义(一般为XML文件),通过流程定义创建流程实例,查询和访问流程相关的实例与数据,等等。Flowable可以灵活地添加到我们的服务、应用、架构中,可以通过引入Flowable jar包,或者直接使用Flowable的Rest API来进行业务流程引擎的操作。Flowable是基于Activity5.0的一个分支开发的,因此内部的很多概念都相似。

官方文档:

https://flowable.com/open-source/docs/dmn/ch06-DMN-Introduction/

四、spring整合drools+flowable决策引擎:

1. 决策表

2. BPMN决策流程

好的,下面是一个简单的Spring Boot使用Drools的示例: 1. 添加Drools依赖 在pom.xml文件中添加Drools的依赖: ```xml <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.53.0.Final</version> </dependency> ``` 2. 创建Drools规则文件 在resources目录下创建一个名为"rules.drl"的文件,并添加以下规则: ```drools package com.example.demo.rules import com.example.demo.model.Message rule "Hello World" when m : Message( status == Message.HELLO, message : message ) then System.out.println( message ); m.setMessage( "Goodbye cruel world" ); m.setStatus( Message.GOODBYE ); update( m ); end ``` 3. 创建模型类 创建一个名为Message的Java类,它将用于在规则文件中定义条件和操作。 ```java public class Message { public static final int HELLO = 0; public static final int GOODBYE = 1; private String message; private int status; public String getMessage() { return this.message; } public void setMessage(String message) { this.message = message; } public int getStatus() { return this.status; } public void setStatus(int status) { this.status = status; } } ``` 4. 创建规则执行器 创建一个名为"RuleExecutor"的Java类,它将用于加载规则文件并执行规则。 ```java @Service public class RuleExecutor { private KieSession kieSession; @Autowired public RuleExecutor(KieContainer kieContainer) { kieSession = kieContainer.newKieSession(); } public void executeRules(Message message) { kieSession.insert(message); kieSession.fireAllRules(); } } ``` 5. 创建控制器 创建一个名为"DemoController"的Java类,它将用于处理HTTP请求并调用规则执行器。 ```java @RestController public class DemoController { @Autowired private RuleExecutor ruleExecutor; @GetMapping("/hello") public String hello() { Message message = new Message(); message.setStatus(Message.HELLO); message.setMessage("Hello World"); ruleExecutor.executeRules(message); return message.getMessage(); } } ``` 6. 运行应用程序 现在,您可以运行Spring Boot应用程序并访问"http://localhost:8080/hello",该应用程序将打印“Hello World”并将消息更新为“Goodbye cruel world”。 请注意,这只是一个简单的示例。在实际应用程序中,您可能需要为规则文件定义更复杂的条件和操作,并使用更复杂的模型类。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值