【发布时间】:2017-12-02 07:28:25
【问题描述】:
我正在处理一个项目,我们处理不同的文件,对于每个不同的文件,我们需要运行一些从数据库中获取的特定规则。现在,如果我们为文件的每一行编译规则,则需要大量时间,因此会出现性能问题。所以,我们所做的是,我们正在编译我的应用程序启动时的所有规则并创建 kieContainer。但是,我不知道如何根据我的文件 ID 执行文件特定规则。你能帮忙吗?
例如,我有 2 个 id 为 1 和 2 的文件。我总共有 10 条规则,其中 5 条用于文件 1,其余 5 条用于文件 2。
使用下面的代码,它会触发两个文件的所有 10 条规则。
这是我的示例代码:
@Bean
public KieContainer kieContainer() throws IOException {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
// To get rules from DB
List<String> rules = loadRules();
int i=0;
for (String file : rules) {
kieFileSystem.write("src/main/resources/rules/" + "a"+i+".drl", kieServices.getResources().newReaderResource(new StringReader(file)));
i++;
}
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}
//当我执行规则时
KieSession kieSession = kieContainer.newKieSession();
kieSession.insert(myObject);
kieSession.fireAllRules();
kieSession.dispose();
【问题讨论】:
标签: java drools rule-engine business-rules drools-kie-server