Java 已更新*.drl,但更改未生效
当编译器读取*.drl文件时,或者哪一行代码正在读取*.drl,并且我想在程序执行时更新*.drl,然后我对程序生效Java 已更新*.drl,但更改未生效,java,drools,Java,Drools,当编译器读取*.drl文件时,或者哪一行代码正在读取*.drl,并且我想在程序执行时更新*.drl,然后我对程序生效 public static void main(String[] args) throws InterruptedException { KnowledgeBase kbase = createKnowledgeBase(); StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(
public static void main(String[] args) throws InterruptedException {
KnowledgeBase kbase = createKnowledgeBase();
StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
Account account = new Account();
account.setBalance(99);
account.setId("N1");
Account account2 = new Account();
account2.setBalance(12);
account2.setId("N2");
session.insert(account);
session.insert(account2);
session.fireAllRules();
}
private static KnowledgeBase createKnowledgeBase() throws InterruptedException {
KnowledgeBuilder builder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
//File accountRules = new File("rules.drl");
System.out.println("**Before Thread****");
Thread.sleep(50000);
System.out.println("***After Theread****");
builder.add(ResourceFactory.newClassPathResource("com/iton/rules/rules.drl"), ResourceType.DRL);
if (builder.hasErrors()) {
throw new RuntimeException(builder.getErrors().toString());
}
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());
return knowledgeBase;
}
}如果我正确理解了问题,根据上面的代码,如果您更改了.drl文件,则需要再次运行createKnowledgeBase方法。程序处于运行状态,我已更改*.drl如果您希望Drools在运行时自动重新加载drl,则应以其他方式将其反映到程序中,然后,您需要更改代码以使用知识代理来管理知识库: