java - 有没有办法从类路径外部导入规则文件?
问题描述
我在 Eclipse 中处理 Drools 决策表,并注意到我能够将规则文件导入我的 Kie 会话的唯一方法是将文件直接放在 Eclipse 项目中。我想知道是否有办法访问位于“C:Users/user/documents/rules/”中某处的规则文件,或者该文件是否必须在工作区中。
我对 Drools 或 KIE 不是很熟悉,所以我所拥有的服务的唯一知识涉及网站上的文档以及 google 和 youtube 上的各种教程。到目前为止我发现的代码似乎还不够。
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-dtables");
上面直接引用了一个在xml文件中预定义的会话,我不确定如何定义我自己的来访问eclipse项目之外的文件。
KieServices kieServices = KieServices.Factory.get();
Resource dt
= ResourceFactory
.newClassPathResource("Sample.xls", getClass());
KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(dt);
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieRepository kieRepository = kieServices.getRepository();
ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId);
KieSession kieSession = kieContainer.newKieSession();
而且这个块稍微好一点,因为我可以直接引用项目中的一个文件,但问题是它仍然需要在项目中。
解决方案
对于它的价值,我能够找到解决方法。
Drools 有一个库,它试图将任何 excel 决策表文件转换为 DRL 文件。使用这个库,我使用了我的 excel 文件的路径,然后基本上将 DRL 转换为字符串,然后添加到 KIE 会话中。它最终看起来像这样:
import org.drools.decisiontable.SpreadsheetCompiler;
String rulesExcel = "C:\\my\\path\\file.xls";
InputStream is = null;
try {
is= new FileInputStream(rulesExcel);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SpreadsheetCompiler sc = new SpreadsheetCompiler();
String rules=sc.compile(is, InputType.XLS);
KieSession kieSession = new KieHelper().addContent(rules, ResourceType.DRL).build().newKieSession();
推荐阅读
- c - 如何在 Xamarin Forms 平台上应用行为
- ios - 重命名 Cocoapods 依赖项
- git - 关于github中的版本控制
- json - 使用 swift 从 JSON 中删除不需要的数据
- git - 有多个同名文件时如何忽略一个文件
- java - 使用 Spring @RequestParam 无法在控制器中获取“#”符号
- snowflake-cloud-data-platform - 我怎么知道雪花“预览”功能何时会进入“生产”状态?
- graphviz - 如何动态增加 GraphViz 中两个节点之间的距离?
- flutter - Flutter:ThemeData 中bottomNavigationBar 的常用明暗主题
- azure-eventhub - 跨区域的 Azure 事件中心