我看到默认情况下multithreadEvaluation设置为false。我有一个使用电子表格决策表的简单Maven Spring Drools实现。
没什么太大的作用,因为它基本上是标准安装。我有一个宁静的API,当使用jmeter将其发布到端点时,将填充该实体,然后在其上触发所有规则。在jmeter中使用多个线程时,我可以清楚地看到多线程无法正常工作。
摘自文档:
您可以使用以下选项之一启用多线程评估:启用多线程评估系统属性:
drools.multithreadEvaluation=true
以编程方式创建KIE基础时启用多线程评估:
KieServices ks = KieServices.Factory.get(); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption(MultithreadEvaluationOption.YES); KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
尝试将drools.multithreadedEvaluation=true
添加到application.properties。无法解决问题。
尝试了kieSession()
@Bean中的第二种方法,但是未使用kieBase,并且无法解决问题。当前不确定仅实例化KieBase是否足够。这应该去哪里?该方法返回kContainer.newKieSession(),所以不确定如何判断kieBaseConf.setOption(MultithreadEvaluationOption.YES)是否实际上做了什么。
在fireAllRules之前尝试创建新的kieSession并失败。该服务已@Autowired到kieSession @Bean。
第一次使用整个技术堆栈,因此感谢您慢慢来。
TL; DR需要逐步说明如何将drools.multithreadEvaluation设置为true。
根据文档,Drools期望在application.properties
中设置System属性,而我认为这与Spring相关?尝试通过以下方式之一进行设置:
启动应用程序时,在命令行中添加“ -Ddrools.multithreadEvaluation”,例如:
java -Ddrools.multithreadEvaluation <the rest of parameters>
或在任何Drools类被调用之前,在初始化初期以编程方式在应用程序启动时进行设置:
System.setProperty("drools.multithreadEvaluation", "true");