1、规则编写
在resources目录下,先创建com/stateless/
两层目录,再新建testStateless.drl
规则文件,并且将月收入与可授信额度规则关系配置好。
package com.stateless;
import com.example.droolsdemo.model.Borrower
import java.math.BigDecimal
// 月收入[0.5-1)万,可授信2万
rule "testBorrower02"
when
$b:Borrower($b.getIncome() >= 5000.00 && $b.getIncome() <10000.00)
then
$b.setCreditLine(new BigDecimal(20000.00));
end
2、kmodule配置
新增一个kbase
,type
设置为stateless
无状态属性
<kbase name="stateless" packages="com.stateless">
<ksession name="stateless-rules" type="stateless" />
</kbase>
3、业务逻辑
使用无状态会话StatelessKieSession
调用execute()
执行方法即可。
无状态会话无需调用dispose()来关闭会话,它隔离了每次与规则引擎的交互,不会再去维护会话的状态,一般在数据校验与过滤、计算、消息路由等场景用到
/**
* @Author pandafox
* @Desctription 无状态session
* @Date 2020/7/5 18:09
* @Param []
* @return
*/
@Test
public void testBorrower01Stateless() {
//初始化kie容器
KieServices kieServices = KieServices.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
//创建名为stateless-rules的【无状态】kie会话(其配置在kmodule.xml文件中)
StatelessKieSession statelessKieSession = kieContainer.newStatelessKieSession("stateless-rules");
//创建一个借贷人信息,月收入分别为8千
Borrower borrower = new Borrower();
borrower.setName("张三");
borrower.setIncome(new BigDecimal(8000.00));
//【无状态】kie调用execute()执行规则,执行完毕后会自动关闭会话
statelessKieSession.execute(borrower);
//输出结果
System.out.println(borrower.getName() + "可授信额度[" + borrower.getCreditLine() + "]元");
}
4、效果查看
张三可授信额度[20000]元