我正在处理一个项目,我们处理不同的文件,对于每个不同的文件,我们需要运行一些从数据库中获取的特定规则。现在,如果我们为文件的每一行编译规则,会花费大量时间,从而导致性能问题。所以,我们所做的是,我们正在编译我的应用程序启动时的所有规则并创建 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();