Drools全局变量使用报错求助:已声明却无法调用全局变量
问题原因及解决方案
你的DRL代码错误在于全局变量声明后直接在文件顶层执行Java语句——Drools的DRL有严格的结构规范,文件顶层仅允许放置全局变量、规则、函数等声明类内容,所有执行逻辑必须放在规则的then块内部。
修正后的DRL代码
global Boolean testValue rule "Check Global Variable" when // 若无需匹配特定业务事实,用eval(true)确保规则触发 eval(true) then System.out.println("Global testValue: " + testValue); end
关键注意事项
- 全局变量仅能在规则的
then执行块或规则内部的可执行代码区域访问,不能直接在文件顶层调用 - 若规则不需要匹配特定事实,添加
eval(true)作为条件,保证规则会被触发执行 - 确认赋值全局变量的代码正确绑定到KieSession,示例Java代码:
KieSession kieSession = kieContainer.newKieSession(); // 变量名需与DRL中声明的完全一致 kieSession.setGlobal("testValue", Boolean.TRUE); kieSession.fireAllRules(); kieSession.dispose();
内容的提问来源于stack exchange,提问作者nightfury
相关产品推荐
相关产品推荐

