我在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应用程序时,它运行正常。 请帮忙。
答案 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
答案 3 :(得分:0)
那是Drools中的错误,并已在此JIRA中解决: https://issues.redhat.com/browse/DROOLS-2311?_sscc=t