Spring Boot Drools无法在Sping Boot 项目中加载规则

tpgth1q7  于 2023-03-02  发布在  Spring
关注(0)|答案(5)|浏览(353)

我在Spring Boot 项目中使用Drools 7.5.0-final。
我正在处理一个多模块Gradle项目。Rules和kmodule.xml位于子模块项目中。此模块被打包为一个Jar,位于一个fat spring Boot Jar文件中。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://jboss.org/kie/6.0.0/kmodule">
  4. <!-- <configuration>
  5. <property key="drools.propertySpecific" value="ALLOWED"/>
  6. </configuration> -->
  7. <kbase name="rules.employee.tax" packages="uk.gov.hmrc.itmp.service.application.rules.employee.tax" >
  8. <ksession name="rules.employee.tax.session" type="stateful" />
  9. <ksession name="rules.employee.tax.statelesssession" type="stateless" />
  10. </kbase>
  11. </kmodule>

我从类路径构建容器。

  1. KieContainer kContainer = kieService.newKieClasspathContainer();

在服务器启动时**(java -jar)它加载Kmodule.xml并打印所有知识库和会话名称。
但是当我触发规则时,它返回
zero rules fired**。

**当我从Eclipse作为Sping Boot 应用程序运行时,它工作正常。**请帮助。

kxeu7u2r

kxeu7u2r1#

这似乎是KieServices和Sping Boot Uber jar中的一个bug。这里发布了一个工作:https://groups.google.com/forum/#!topic/drools-usage/odQjmBess5A
基本上,配置 Boot 插件来解压缩kiejar。

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <configuration>
  5. <requiresUnpack>
  6. <dependency>
  7. <groupId>com.sample</groupId>
  8. <artifactId>kproject1</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.sample</groupId>
  12. <artifactId>kproject2</artifactId>
  13. </dependency>
  14. </requiresUnpack>
  15. </configuration>
  16. <executions>
  17. <execution>
  18. <phase>package</phase>
  19. <goals>
  20. <goal>repackage</goal>
  21. </goals>
  22. </execution>
  23. </executions>
  24. </plugin>
展开查看全部
cngwdvgl

cngwdvgl2#

确保具有以下依赖项

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

并删除spring-boot-devtools依赖项(如果有)。
(This为我工作。)

monwx1rj

monwx1rj3#

当使用spring-boot-devtools时,这是因为事实通常使用“Restart Classloader”加载,而Drools类使用“Base Classloader”加载。因此,当执行规则时,事实对象不匹配。
我也通过对Drools类使用“Restart Classloader”解决了这个问题,方法是在我的spring-boot-application中创建一个包含以下内容的文件src/main/resources/META-INF/spring-devtools.properties:

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

相关Spring文档

gdx19jrr

gdx19jrr4#

这是Drools中的漏洞,已在此JIRA下解决:https://issues.redhat.com/browse/DROOLS-2311?_sscc=t

krcsximq

krcsximq5#

在升级到java17和最新版本的drools 8.34.0.Final(从7.x版)后,我遇到了类似的问题。规则不再位于kmodule.xml文件中。关于问题根源的提示是控制台日志(很容易忽略):

  1. 2023-02-23 15:01:35.467546300 DEBUG 18840 [DEX ] [main] o.d.c.k.b.i.ClasspathKieProject :423 : KieModule URL type=file url=/C:/aaa/target/classes
  2. 2023-02-23 15:01:35.467546300 ERROR 18840 [DEX ] [main] o.d.c.k.b.i.ClasspathKieProject :143 : Unable to build index of kmodule.xml url=file:/C:/aaa/target/classes/META-INF/kmodule.xml
  3. You're trying to perform a xml related operation without the necessary xml support for drools. Please add the module org.drools:drools-xml-support to your classpath.

解决方案是添加带有xml支持的新发布的jar:

  1. <dependency>
  2. <groupId>org.drools</groupId>
  3. <artifactId>drools-xml-support</artifactId>
  4. <version>${drools-version}</version>
  5. </dependency>

注意:所有需要的插件和jar都列在下面,而且我仍然有这个<requiresUnpack>选项,你可以在另一个答案中找到

  1. <plugin>
  2. <groupId>org.kie</groupId>
  3. <artifactId>kie-maven-plugin</artifactId>
  4. <version>${drools-version}</version>
  5. <extensions>true</extensions>
  6. </plugin>
  7. <!-- Drools -->
  8. <dependency>
  9. <groupId>org.drools</groupId>
  10. <artifactId>drools-bom</artifactId>
  11. <type>pom</type>
  12. <version>${drools-version}</version>
  13. <scope>import</scope>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.kie</groupId>
  17. <artifactId>kie-api</artifactId>
  18. <version>${drools-version}</version>
  19. <exclusions>
  20. <exclusion>
  21. <groupId>com.thoughtworks.xstream</groupId>
  22. <artifactId>xstream</artifactId>
  23. </exclusion>
  24. </exclusions>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.drools</groupId>
  28. <artifactId>drools-core</artifactId>
  29. <version>${drools-version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.drools</groupId>
  33. <artifactId>drools-mvel</artifactId>
  34. <version>${drools-version}</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.drools</groupId>
  38. <artifactId>drools-xml-support</artifactId>
  39. <version>${drools-version}</version>
  40. </dependency>
展开查看全部

相关问题