左手定则详解
1 |
|
1 | public interface UserService { |
1 | package com.kagura; |
1 | package rules; |
规则属性
activation-group:同一个组,只会执行一个 rule。
salience 优先级。
agenda-group:议程组,同一个组,全部 rule 都会执行。
update:这里会一直打印 1,2 1,2 因为 update 会重新匹配,符合条件,继续重新执行。
no-loop true => 不进行重复执行
对于上面,no-loop true 还是重复打印了 1。
任何一个 rule 都执行一次,加上 lock-on-active true 可以解决。
加上 lock-on-active true的话,update 更新之后,也不会执行后续的 rule。
下面如果不加 “lock-on-active true” 属性,会执行两个 rule(从上到下)。加了之后,只会执行上面一个 rule。
insert,插入之后,会重新匹配所有的 rule。
上面一个 rule 加了“no-loop true”,所以只会执行一次输出“BBB”。下面则会匹配到,输出“CCC”。
retract 用完之后,把对象删除。
当前组中,激活其他组。
kieSession有状态,无状态
1 | 任何无状态的对象,都不需要手动去处理连接。 |
有状态:其实就是用完就关闭会话。
其实,无状态也是一个伪无状态。它也是需要释放的。只不过代码中帮我们做了。
决策表
好处:
1、更加清晰的实现逻辑代码
2、实现热部署
3、方便开发修改配置
4、为不懂开发的人员提供更新的条件
原理:使用 Excel 来配置规则,使用代码读取 Excel,把内容转换为 drl 格式,再读取内存来执行(Excel 可以给不懂开发的人员提供更新条件)。
定时
滑动窗口
热部署
1、每次都去重新读取 drl 文件,生成一个新的 KieSession(文件放到项目外)。
2、每次都去重新读取 Excel 文件,生成一个新的 KieSession(文件放到项目外)。