我想使用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
是一个实体,只有一个带有getter和setter的id,firstname和lastname。
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是在后台做某事吗?
答案 0 :(得分:1)
对于遇到同样问题并阅读我问题的每个人:
我还没有直接解决它,但这个问题与netbeans有关。通过命令行启动应用程序时一切正常。所以这是要走的路。
答案 1 :(得分:0)
我知道这个问题已经有了它已经接受的答案,但是我觉得在删除 spring-boot-devtools
(Maven依赖,在我的情况下)之后说这个bug会很好走了。
参考:"No rules are fired in helloworld using Spring rest controller!" on Google groups。