繁体   English   中英

Drools 在 Spring Boot 中无法正常工作

[英]Drools not working correctly with Spring Boot

我想将 Drools 与 Spring Boot 一起用于 Bean 验证,但我已将问题缩小到以下几行代码:

主班

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        //SpringApplication.run(App.class, args);
        check();
    }

    public static void check() {
        // load up the knowledge base
        KieServices ks = KieServices.Factory.get();
        KieContainer kContainer = ks.getKieClasspathContainer();
        KieSession kSession = kContainer.newKieSession("ksession-rules");
        //go
        Patient patient = new Patient("Hans", "Mueller");
        kSession.insert(patient);
        kSession.fireAllRules();
    }
}

Patient是一个实体,只有一个 id、名字和姓氏以及 getter 和 setter。

kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="ksession-rules"/>
    </kbase>
</kmodule>

和两条规则

package com.sample

import com.sample.Patient;

rule "Test"
    when
        eval(1 == 1)
    then
        System.out.println("This rule is always fired");
end

rule "Patient"
    when
        exists Patient()
    then
        System.out.println("Patient found");
end

调用SpringApplication.run(App.class, args) (如上)一切正常:

15:50:12.730 [main] DEBUG org.drools.core.impl.KnowledgeBaseImpl - Starting Engine in PHREAK mode
15:50:12.820 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is nw FIRING_ALL_RULES
15:50:12.821 [main] DEBUG org.drools.core.common.DefaultAgenda - Fire Loop
This rule is always fired
15:50:12.827 [main] DEBUG org.drools.core.common.DefaultAgenda - Fire Loop
Patient found
15:50:12.827 [main] DEBUG org.drools.core.common.DefaultAgenda - Fire Loop
15:50:12.827 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is nw HALTING
15:50:12.827 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is nw INACTIVE

但是,当我将SpringApplication.run(App.class, args)添加到 main 时,只会触发一条规则:

This rule is always fired

甚至org.drools.core.common.DefaultAgenda的日志记录也不再可见。

我不知道出了什么问题? 我希望在两种情况下输出相同。 SpringBoot 是否在后台执行某些操作?

我知道这个问题已经得到了公认的答案,但我觉得在这里声明在删除spring-boot-devtools (在我的情况下为 Maven 依赖项)后,错误消失了会很好。

参考: “使用 Spring rest 控制器在 helloworld 中没有触发任何规则!” 在 Google 群组上

对于有同样问题并阅读我的问题的每个人:

我没有直接解决它,但问题与netbeans有关。 通过命令行启动应用程序时一切正常。 所以这是要走的路。

我在 kmodule.xml 中添加了以下几行。 它也适用于日食。 <kbase name="rules" packages="rules" e ventProcessingMode="cloud" equalsBehavior="equality" declarativeAgenda="enabled" >

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM