如何在Excel格式的Drools RuleTable中定义@Watch注解
Drools Excel规则表配置@Watch注解方法
直接在Excel规则表的CONDITION定义行追加注解即可生效,无需手动修改生成后的DRL文件,具体操作如下:
- 找到对应条件列的CONDITION配置单元格,该单元格原本的配置内容为模式匹配规则,示例如下:
$payCommResponseDTO:PaymentCommissionResponseDTO(commissionStructure == $param) - 直接在模式匹配的右括号后追加
@Watch注解配置即可,修改后内容如下:$payCommResponseDTO:PaymentCommissionResponseDTO(commissionStructure == $param) @Watch(commissionStructure)
配置完成后重新编译Excel规则表,生成的DRL就会自动携带@Watch注解,和目标格式完全一致。
扩展说明
- 如需监听多个字段,直接在
@Watch括号内用逗号分隔字段名即可,示例:@Watch(commissionStructure, payAmount, status) - 如需每行规则配置不同的监听字段,可以将@Watch内容参数化,CONDITION行配置改为
$payCommResponseDTO:PaymentCommissionResponseDTO(commissionStructure == $param) @Watch($1),再新增一列填写对应要监听的字段值即可 - 可通过以下代码本地验证生成的DRL是否符合预期:
import org.drools.decisiontable.SpreadsheetCompiler; import org.kie.internal.builder.DecisionTableInputType; import java.io.FileInputStream; public class ValidateDrl { public static void main(String[] args) throws Exception { SpreadsheetCompiler compiler = new SpreadsheetCompiler(); // 替换为你的Excel规则表文件路径 String drlContent = compiler.compile(new FileInputStream("rules/commission_rules.xls"), DecisionTableInputType.XLS); System.out.println(drlContent); } }
注意事项
- @Watch注解必须写在模式匹配的外层右括号之后,不要写到括号内部的条件判断区域
- 注解配置和前面的模式匹配规则之间保留一个空格即可,无需其他特殊分隔符
内容的提问来源于stack exchange,提问作者Andre Kapp
相关产品推荐
相关产品推荐

