基于Drools决策表的通用规则集设计
来源:互联网 发布:聚划算淘宝商城手表 编辑:程序博客网 时间:2024/06/06 02:47
Jie 2017/12/05
1 决策表设计
RuleSet [required]规则包自定义名称
Import [option]导入规则库的类和静态函数(function)列表
Sequential [option]是否按从上到下的顺序执行规则
RuleTable [required]定义规则表,后紧接自定义规则前缀名称
CONDITION [required]该列是规则的条件表达式
ACTION [required]该列是规则的结论
PRIORITY [option]该列是规则的salience值,数值越大优先级越高。覆盖Sequential关键字
$param占位符
$1,$2,...占位符:逗号分隔的值列表
通过Import类和静态方法,在决策表内就可以使用自定义方法扩展操作。
DTO的paramX属性均为String类型,需要根据具体上下文调用parse方法转换数据类型。
规则执行结果可保存在DTO的retX属性(String类型),也需要parse。
1.1 需求模板+数据
2 Drools决策表通用服务
支持XLS文件、DRL字符串格式的规则集。
建议通过读取DRL字符串配置的方式加载规则集并执行。
/** Drools决策表 */public class DroolsSvs {/** * 加载XLS文件,获取KieSession * * @param xlsPath * 决策表XLS文件路径 * @return KieSession */public static KieSession getKieSessionByXls(String xlsPath) {DecisionTableConfiguration dtc = KnowledgeBuilderFactory.newDecisionTableConfiguration();dtc.setInputType(DecisionTableInputType.XLS);KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();knowledgeBuilder.add(ResourceFactory.newClassPathResource(xlsPath, DroolsSvs.class), ResourceType.DTABLE, dtc);KnowledgeBase knowledgeBase = knowledgeBuilder.newKnowledgeBase();knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());return knowledgeBase.newStatefulKnowledgeSession();}/** * 加载DRL字符串,获取KieSession * * @param drlStr * DRL字符串 * @return */public static KieSession getKieSessionByDrlString(String drlStr) {Resource resource = ResourceFactory.newReaderResource((Reader) new StringReader(drlStr));KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();knowledgeBuilder.add(resource, ResourceType.DRL);KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());return knowledgeBase.newStatefulKnowledgeSession();}/** * 将XLS文件编译为DRL字符串 * * @param xlsPath * 决策表XLS文件路径 * @return DRL字符串 * @throws Exception */public static String compile2DRL(String xlsPath) throws Exception {FileInputStream fis = new FileInputStream(new File(xlsPath));SpreadsheetCompiler converter = new SpreadsheetCompiler();return converter.compile(fis, InputType.XLS);}/** * 注入POJO,执行规则 * * @param kieSession * @param pojos */public static void execute(KieSession kieSession, DroolsSpreadsheet... pojos) {for (DroolsSpreadsheet pojo : pojos)kieSession.insert(pojo);kieSession.fireAllRules();kieSession.dispose();}public static void main(String[] args) {try {String xlsPath = "Drools.xls";String drlStr = DroolsSvs.compile2DRL(xlsPath);// KieSession kieSession = DroolsSvs.getKieSessionByXls(xlsPath);KieSession kieSession = DroolsSvs.getKieSessionByDrlString(drlStr);DroolsSpreadsheet pojo1 = new DroolsSpreadsheet();pojo1.setParam1("Orthopedics");pojo1.setParam2("31");pojo1.setParam3("1000");pojo1.setParam4("B");DroolsSpreadsheet pojo2 = new DroolsSpreadsheet();pojo2.setParam1("Orthopedics");pojo2.setParam2("31");pojo2.setParam3("1800");pojo2.setParam4("B");DroolsSvs.execute(kieSession, pojo1, pojo2);} catch (Exception e) {e.printStackTrace();}}}
2.1 通用DTO
public class DroolsSpreadsheet {private String param1;private String param2;private String param3;private String param4;private String param5;private String param6;private String param7;private String param8;private String ret1;private String ret2;private String ret3;// gets and sets}
2.2 maven依赖
<dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-decisiontables</artifactId><version>${drools.version}</version></dependency>
阅读全文
0 0
- 基于Drools决策表的通用规则集设计
- Drools决策表的使用
- drools解析决策表为drl普通规则文件
- 基于Drools的CEP规则引擎实现
- 基于规则引擎的经营决策管理
- drools 6.5 决策表使用
- Drools7.5.0教程(11)-drools决策表的使用
- 基于业务规则的客户风险评分 - Drools实现
- drools的规则文件
- 如何部署JBoss Drools的可视化规则设计工具包
- 基于决策表的测试
- 基于 Jboss Drools 规则引擎开发框架
- Drools的决策表xls文件转drl文件所依赖的poi版本
- 通用的业务编码规则设计实现
- 通用的业务编码规则设计实现
- 通用类设计规则
- 规则引擎决策表应用
- 对构成三角形规则的决策表合并优化方法
- Linux与网络
- 远程连接MYSQL提示Host is not allowed to connect to this MySQL server
- 漫画:什么是单例模式?(整合版)
- 十进制转换成字符串
- vue单页应用之创建和运行
- 基于Drools决策表的通用规则集设计
- Android 还可以走多久?
- 【LLVM】《Getting Started with LLVM Core Libararies》读书笔记——写一个PASS
- u-boot与linux下网卡MAC地址的更改
- Java多线程编程总结
- 让webstorm支持arcgis api 的代码提示
- C++网络(三)用Socket API建立简易TCP服务端、客户端
- JVM实用参数(三)打印所有XX参数及值
- DeBug能力