私は異なるファイルを処理するプロジェクトに取り組んでいます。異なるファイルごとに、データベースからフェッチするいくつかのルールを実行する必要があります。さて、ファイルの各行のルールをコンパイルすると、時間がかかり、パフォーマンス上の問題が発生します。だから、私たちはアプリケーションの起動時にすべてのルールをコンパイルし、kieContainerを作成しています。しかし、ファイルIDに基づいてファイル固有のルールを実行する方法がわかりません。あなたは助けてもらえますか?Drools - パラメータに基づいてKie Containerから特定のルールを実行する
は、例えば、私は5は、ファイル1のためのものであり、図5は、以下のコードでファイル2
ためのもので休ませた合計10個のルールを持ってID 1と2との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();