Drools无法在Spring Boot Project中加载规则

时间:2018-02-07 15:48:35

标签: spring spring-boot drools business-rules kie

我在Spring Boot项目中使用Drools 7.5.0-final。

我正在开发一个多模块Gradle项目。 子模块项目中存在规则和kmodule.xml。该模块在Jar弹簧启动Jar文件中打包为Jar。

  <?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://jboss.org/kie/6.0.0/kmodule">
<!-- <configuration>
  <property key="drools.propertySpecific" value="ALLOWED"/>
</configuration> -->

<kbase name="rules.employee.tax"   packages="uk.gov.hmrc.itmp.service.application.rules.employee.tax" > 
<ksession name="rules.employee.tax.session" type="stateful"  />
<ksession name="rules.employee.tax.statelesssession" type="stateless" />
</kbase>  
</kmodule>

我正在从类路径构建容器。

KieContainer kContainer = kieService.newKieClasspathContainer();

在服务器启动(java -jar)它加载Kmodule.xml并打印所有kbase和sessionName。

但是当我触发规则时,它会返回 zero rules fired

当我从Eclipse运行Spring Boot应用程序时,它运行正常。 请帮忙。

4 个答案:

答案 0 :(得分:1)

这似乎是KieServices和SPring Boot uber jar中的错误。这里有一个解决方法: https://groups.google.com/forum/#!topic/drools-usage/odQjmBess5A

基本上,配置Spring Boot Maven插件以解开开罐的包装。

dependencies {
    compile 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0'
}

答案 1 :(得分:0)

确保您具有以下依赖项

implementation group: 'org.kie', name: 'kie-api', version: '7.16.0.Final'
implementation group: 'org.drools', name: 'drools-core', version: '7.16.0.Final'
implementation group: 'org.drools', name: 'drools-compiler', version: '7.16.0.Final'
implementation group: 'org.kie', name: 'kie-spring', version: '7.16.0.Final'

,并删除spring-boot-devtools依赖项(如果有)。

(这对我有用。)

答案 2 :(得分:0)

使用spring-boot-devtools时,这是因为通常使用“重新启动类加载器”来加载事实,而使用“基础类加载器”来加载Drools类。因此,事实对象在执行规则时不匹配。

我也通过对Drools类使用“重启类加载器”来解决此问题,方法是在我的spring-boot-application中创建文件src / main / resources / META-INF / spring-devtools.properties,内容如下:

restart.include.dools=/(drools|kie)\-.*\.jar

Related spring docs

答案 3 :(得分:0)

那是Drools中的错误,并已在此JIRA中解决: https://issues.redhat.com/browse/DROOLS-2311?_sscc=t