规则引擎DROOLS简明教程
- 格式:pdf
- 大小:197.64 KB
- 文档页数:11
drools 数据库加载规则Drools是一个基于规则引擎的开源项目,它可以用来管理和执行业务规则。
Drools可以从数据库中加载规则,这个过程需要遵循一定的规则和流程。
下面将详细介绍Drools数据库加载规则的步骤和注意事项。
一、准备工作在开始加载规则之前,需要做一些准备工作,包括:1. 创建数据库表首先需要在数据库中创建一个表来存储规则信息。
表的结构可以根据实际情况进行设计,但至少应该包含以下字段:- id:规则的唯一标识符- name:规则的名称- content:规则的内容- version:规则的版本号- status:规则的状态(启用/禁用)2. 编写规则文件接下来需要编写一个Drools规则文件,其中包含了要加载到数据库中的所有业务规则。
这个文件应该使用.drl扩展名,并且遵循Drools语法。
3. 配置数据源最后需要配置数据源,在Drools配置文件中指定要使用的数据库类型、连接信息等。
二、加载流程完成了上述准备工作之后,就可以开始加载业务规则了。
整个过程分为以下几个步骤:1. 读取数据库中的规则信息首先需要从数据库中读取要加载的规则信息。
可以使用JDBC或者其他ORM框架来实现这个功能。
读取到的规则信息应该是一个列表,其中每个元素包含了规则的id、name、content等信息。
2. 构建KnowledgeBuilder接下来需要构建一个KnowledgeBuilder对象,用于编译规则文件和数据库中读取到的规则信息。
可以使用Drools提供的API来创建KnowledgeBuilder对象。
3. 编译规则文件使用KnowledgeBuilder对象编译规则文件,将其转换为可执行的Drools规则。
4. 编译数据库中读取到的规则信息使用KnowledgeBuilder对象编译从数据库中读取到的规则信息,将其转换为可执行的Drools规则。
5. 合并所有编译后的规则将编译后的规则文件和数据库中读取到的规则信息合并成一个完整的Drools知识库。
[Drools]JA V A规则引擎(非常好的一篇教程)Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。
本文所使用的demo已上传/source/30022131、Drools语法开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要穿进去参数,其次要获取到接口的实现执行完毕后的结果,而drools也是一样的,我们需要传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后得到的结果。
在drools中,这个传递数据进去的对象,术语叫Fact对象。
Fact 对象是一个普通的java bean,规则中可以对当前的对象进行任何的读写操作,调用该对象提供的方法,当一个java bean 插入到workingMemory中,规则使用的是原有对象的引用,规则通过对fact对象的读写,实现对应用数据的读写,对于其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前workingMemory中插入删除新的fact对象。
规则文件可以使用.drl文件,也可以是xml文件,这里我们使用drl文件。
规则语法:package:对一个规则文件而言,package是必须定义的,必须放在规则文件第一行。
特别的是,package的名字是随意的,不必必须对应物理路径,跟java的package的概念不同,这里只是逻辑上的一种区分。
同样的package下定义的function和query等可以直接使用。
比如:package com.drools.demo.pointimport:导入规则文件需要使用到的外部变量,这里的使用方法跟java相同,但是不同于java的是,这里的import导入的不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法。
Drools5规则引擎规则引擎开发开发教程教程教程高杰上海锐道信息技术有限公司2009-8-201.学习前的准备Drools是一款基于Java的开源规则引擎,所以在使用Drools之前需要在开发机器上安装好JDK环境,Drools5要求的JDK版本要在1.5或以上。
1.1. 开发环境搭建大多数软件学习的第一步就是搭建这个软件的开发环境,Drools也不例外。
本小节的内容就是介绍如何搭建一个Drools5的开发、运行、调试环境。
1.1.1.下载开发工具Drools5提供了一个基于Eclipse3.4的一个IDE开发工具,所以在使用之前需要到网站下载一个 3.4.x版本的Eclipse,下载完成之后,再到/drools/downloads.html网站,下载Drools5的Eclipse插件版IDE及Drools5的开发工具包,如图1-1所示。
图1-1除这两个下载包以外,还可以把Drools5的相关文档、源码和示例的包下载下来参考学习使用。
将下载的开发工具包及IDE包解压到一个非中文目录下,解压完成后就可以在Eclipse3.4上安装Drools5提供的开发工具IDE了。
1.1.2.安装Drools IDE打开Eclipse3.4所在目录下的links目录(如果该目录不存在可以手工在其目录下创建一个links目录),在links目录下创建一个文本文件,并改名为drools5-ide.link,用记事本打开该文件,按照下面的版本输入Drools5 Eclipse Plugin文件所在目录:path=D:\\eclipse\\drools-5.0-eclipse-all这个值表示Drools5 Eclipse Plugin文件位于D盘eclipse目录下的drools-5.0-eclipse-all 下面,这里有一点需要注意,那就是drools-5.0-eclipse-all文件夹下必须再包含一个eclipse 目录,所有的插件文件都应该位于该eclipse目录之下,接下来要在win dos下重启Eclipse 3.4,检验Drools5 IDE是否安装成功。
规则引擎-drools使⽤讲解(简单版)-Javadrools规则引擎现状:1. 运维同学(各种同学)通过后台管理界⾯直接配置相关规则,这⾥是通过输⼊框、下拉框等完成输⼊的,⾮常简单;2. 规则配置完毕后,前端请求后端,此时服务端根据参数(即规则)⽣成drl规则⽂件;3. ⽤户侧有相关请求到达时,服务端加载规则⽂件(可能是多个,⼀般⼀个⼴告、活动对应⼀个规则⽂件),并通过引擎去检查当前⽤户各种状态是否满⾜规则⽂件;4. 将所有满⾜的规则⽂件对应的⼴告、活动进⾏下发,同时更新⽤户数据;5. 完成整个drools相关流程;关于drools是⼀款标准、效率⾼、速度快的开源规则引擎,基于ReteOO算法,⽬前主要应⽤场景在⼴告、活动下发等领域⾮常多,⽐如APP的活动下发,通常都是有很多条件限制的,且各种活动层出不穷,⽆法代码穷举,⽽如果每次为了⼀个活动重新发版上线,显然是不合理的,因此通过drools将活动中变的部分抽象为⼀个个单独的规则⽂件,来屏蔽这部分的变化,使得系统不需要从代码层⾯做出改变,当然了为了更加极致的抽象,通常还需要对规则中的⼀些可配条件(⼤于、⼩于、等于、范围、次数等)也提取到数据库中,这样在现有规则不满⾜要求时,可以直接通过更改数据库的对应规则表来完善,同样不需要改代码;我们当时的需求主要就是⼴告、活动下发规则⽐较多,⼴告也是各式各样,因此去调研了drools,对drools也没有过多的挖掘其更多特性,因此还需要⼤家的指点;drools简单使⽤服务端项⽬中使⽤drools的⼏个基本步骤;step 1 -- 添加相关依赖到maven pom.xml<dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>6.4.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>6.4.0.Final</version></dependency>step 2 -- 创建实体类加载规则⽂件public class CarIllegalRules extends BaseRules{public static void main(String[] args) {try {KieServices ks = KieServices.Factory.get();KieContainer kContainer = ks.getKieClasspathContainer();KieSession ksession = kContainer.newKieSession("ksession-rules");CarIllegalRules carIllegalRules = new CarIllegalRules(10,500,10);ksession.insert(carIllegalRules);ksession.fireAllRules();System.out.println(carIllegalRules.isCan_push()+","+carIllegalRules.getContent());} catch (Exception e) {e.printStackTrace();}}private int illegal_count;private int illegal_money;private int illegal_points;public CarIllegalRules(int illegal_count, int illegal_money, int illegal_points) {super();this.illegal_count = illegal_count;this.illegal_money = illegal_money;this.illegal_points = illegal_points;this.param_value = "illegal_count,illegal_money,illegal_points";}@Overridepublic String toString() {return "CarIllegalRules [illegal_count=" + illegal_count + ", illegal_money=" + illegal_money+ ", illegal_points=" + illegal_points + ", can_push=" + can_push + ", content=" + content + ", tts="+ tts + "]";}public int getIllegal_count() {return illegal_count;}public void setIllegal_count(int illegal_count) {this.illegal_count = illegal_count;}public int getIllegal_money() {return illegal_money;}public void setIllegal_money(int illegal_money) {this.illegal_money = illegal_money;}public int getIllegal_points() {return illegal_points;}public void setIllegal_points(int illegal_points) {this.illegal_points = illegal_points;}}PS:main函数是⽤来测试这个类的;step 3 -- 创建DSLUtils类去执⾏相应规则public class DSLUtil {public static void fireRules(File file, Object rules) {try {KieServices kieServices = KieServices.Factory.get();KieFileSystem kfs = kieServices.newKieFileSystem();Resource resource = kieServices.getResources().newFileSystemResource(file);fire(rules, kieServices, kfs, resource);} catch (Exception e) {e.printStackTrace();}}public static void fireRules(String urlStr, Object rules) {try {KieServices kieServices = KieServices.Factory.get();KieFileSystem kfs = kieServices.newKieFileSystem();Resource resource = kieServices.getResources().newFileSystemResource(FileUtil.getFileFromUrl(urlStr));fire(rules, kieServices, kfs, resource);} catch (Exception e) {e.printStackTrace();}}private static void fire(Object commonRules, KieServices kieServices, KieFileSystem kfs, Resource resource)throws Exception {resource.setResourceType(ResourceType.DRL);kfs.write(resource);KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();if (kieBuilder.getResults().getMessages(Message.Level.ERROR).size() > 0) {throw new Exception();}KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());KieBase kBase = kieContainer.getKieBase();KieSession ksession = kBase.newKieSession();ksession.insert(commonRules);ksession.fireAllRules();}}step 4 -- 创建⼀个类去⽣成规则⽂件⽐如⽣成 music.drl 的⾳乐规则⽂件,这⼀步是可选的,区别在于规则⽂件的⽣成是代码⽣成,还是⼈⼯⽣成,我们的项⽬中是运维同学在后台管理界⾯通过⼀些图形化输⼊框输⼊⼀些指定参数,⽽⽣成规则⽂件是服务端代码⽣成的,因此有了这部分,⽐较实⽤,⼀⽅⾯可以降低⽣成规则⽂件的门槛,任何⼈都可以做,另⼀⽅⾯也避免了⼈⼯出错的可能;public class ActivityUtil {/*** rule template string*/private static String template ="package com.aispeech.dsl\r\n\r\n" +"import {entity_package_path};\r\n\r\n" +"import {entity_package_path}.*;\r\n\r\n" +"rule \"{rule_name}\"\r\n\r\n" +"when\r\n" +"\t{instance_name}:{class_name}({rules})\r\n" +"then\r\n" +"\t{do}\r\n" +"end";private static final String AND = " && ";private static final String OR = " || ";/*** get business rule file xxx.drl* @param carActivity user info entity* @param clazz entity class* @return*/public static File createBusinessRuleFile(Car_activity carActivity, Class clazz, String[] param_texts, String[] param_values) { String ruleStr = template;String entity_package_path = (clazz+"").substring(6);String rule_name = "rule_"+carActivity.getId();String class_name = (clazz+"").substring((clazz+"").lastIndexOf(".")+1);String instance_name = class_name.toLowerCase();String rules = "";JSONArray conditionArray = JSONArray.parseArray(carActivity.getAim_condition());for(int i=0;i<conditionArray.size();i++) {JSONObject condition = conditionArray.getJSONObject(i);rules += "\r\n\t\t("+condition.getString("param")+condition.getString("operator")+condition.getString("value")+")" + AND;}rules = rules.length()>0?rules.substring(0, stIndexOf(AND)):rules;for (String param_value : param_values) {rules += "\r\n\t\t,"+param_value.toLowerCase()+":"+param_value;}String content = JSONObject.parseObject(carActivity.getContent()).getString("content");String tts = carActivity.getTts();for (int i=0;i<param_texts.length;i++) {content = content.replace("#"+param_texts[i]+"#", "\"+"+param_values[i]+"+\"");tts = tts.replace("#"+param_texts[i]+"#", "\"+"+param_values[i]+"+\"");}String _do = instance_name+".setCan_push(true);";_do += "\r\n\t" + instance_name+".setContent(\""+content+"\");";_do += "\r\n\t" + instance_name+".setTts(\""+tts+"\");";return returnFile(ruleStr, entity_package_path, rule_name, class_name, instance_name, _do, rules);}/*** @param ruleStr* @param entity_package_path* @param rule_name* @param class_name* @param instance_name* @param _do* @param rules* @return*/private static File returnFile(String ruleStr, String entity_package_path, String rule_name, String class_name,String instance_name, String _do, String rules) {ruleStr = ruleStr.replace("{entity_package_path}", entity_package_path).replace("{rule_name}", rule_name).replace("{class_name}", class_name).replace("{instance_name}", instance_name).replace("{do}", _do).replace("{rules}", rules);System.out.println(ruleStr);return FileUtil.getFileFromText(rule_name, ".drl", ruleStr);}}step 4.1 -- 通过字符串创建⽂件,给上⼀步⽤的函数public static File getFileFromText(String tempFileName, String fileTail, String text) {try {File file = File.createTempFile(tempFileName, fileTail);FileOutputStream fos = new FileOutputStream(file);fos.write(text.getBytes());if(fos!=null){fos.close();}return file;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}step 5 -- 规则⽂件加载,并⽤以检查当前⽤户是否满⾜下发规则条件BaseRules baseRules = new CarIllegalRules(count, money, points);if(baseRules!=null) {("before fire rules:"+baseRules);DSLUtil.fireRules(ActivityUtil.createBusinessRuleFile(car_activity, baseRules.getClass(),baseRules.getParam_text().split(","), baseRules.getParam_value().split(",")), baseRules);("after fire rules:"+baseRules);if(baseRules.isCan_push()) {//In here, the rules are used to judge the success of the entity, and you can do something}}⼩结本⽂通过对drools的简单使⽤步骤的讲解,为⼤家展⽰了drools最简单的使⽤⽅式,⽽它能做到的远远不⽌看到的这些,但是基本框架是这样,⼤家可以尝试挖掘规则⽂件的⼀些⿊操作,可以对多变的业务进⾏极致的抽象,再也不⽤为了这些重新发版啦,LOL;PS:想深⼊了解的同学还是要去看看Rete算法、drools的推理机制等等,本⽂主要从该引擎的⼊门出发哈;最后⼤家可以到我的Github上看看有没有其他需要的东西,⽬前主要是⾃⼰做的机器学习项⽬、Python各种脚本⼯具、数据分析挖掘项⽬以及Follow的⼤佬、Fork的项⽬等:。
magnum规则转drools规则概述及解释说明1. 引言1.1 概述:本篇文章主要介绍了将magnum规则转换为drools规则的过程和实际应用案例分析。
在软件开发中,规则引擎起着至关重要的作用,它可以帮助我们轻松管理和执行一系列复杂的业务规则。
Magnum和Drools都是流行的规则引擎,在不同领域有广泛应用。
然而,由于Magnum和Drools之间存在一些语法和结构上的差异,因此需要将Magnum规则转换为Drools规则。
1.2 文章结构:本文共分为五个部分进行叙述。
首先,在引言部分我们对文章的背景进行了概述,并说明了文章的结构。
接下来,我们将介绍Magnum规则与Drools规则的简介,包括它们各自的特点和应用场景。
然后,我们将详细说明Magnum规则转换为Drools规则的过程步骤,并通过示例进行说明。
在第四部分中,我们会提供一个实际应用案例进行分析,包括案例背景介绍、转换流程及方法解释以及结果与效果评估。
最后,我们将总结本文主要观点并展望未来发展方向。
1.3 目的:本文的目的是为读者提供一个全面而系统的指南,帮助他们了解Magnum规则转换为Drools规则的过程,并能够在实际应用中灵活运用。
同时,通过案例分析,读者还能够更好地理解这一转换过程对于业务规则管理和执行效果的影响。
我们希望本文能够为那些需要将现有Magnum规则转换为Drools规则的开发者、项目经理和决策者提供有价值的参考,并推动相关技术在未来的研究和发展中取得进一步突破。
2. Magnum规则与Drools规则简介:2.1 Magnum规则概述:Magnum是一种规则引擎,它提供了一种用于编写和执行业务规则的框架。
该框架允许用户将业务规则与应用程序分开,以实现更高的灵活性和可维护性。
Magnum使用基于文本的规则语言,通过定义条件和行动来描述业务规则。
2.2 Drools规则概述:Drools是另一种强大的开源商业逻辑和规则管理系统。
Drools⼊门⼀、背景知识:1、什么是规则引擎Java规则引擎起源于基于规则的专家系统,⽽基于规则的专家系统⼜是专家系统的其中⼀个分⽀。
专家系统属于⼈⼯智能的范畴,它模仿⼈类的推理⽅式,使⽤试探性的⽅法进⾏推理,并使⽤⼈类能理解的术语解释和证明它的推理结论。
推理引擎包括三部分:模式匹配器(Pattern Matcher)、议程(Agenda)和执⾏引擎(Execution Engine)。
推理引擎通过决定哪些规则满⾜事实或⽬标,并授予规则优先级,满⾜事实或⽬标的规则被加⼊议程。
模式匹配器决定选择执⾏哪个规则,何时执⾏规则;议程管理模式匹配器挑选出来的规则的执⾏次序;执⾏引擎负责执⾏规则和其他动作。
和⼈类的思维相对应,推理引擎存在两者推理⽅式:演绎法(Forward-Chaining)和归纳法(Backward-Chaining)。
演绎法从⼀个初始的事实出发,不断地应⽤规则得出结论(或执⾏指定的动作)。
⽽归纳法则是根据假设,不断地寻找符合假设的事实。
Rete算法是⽬前效率最⾼的⼀个 Forward-Chaining推理算法,许多Java规则引擎都是基于Rete算法来进⾏推理计算的。
推理引擎的推理步骤如下:(1)将初始数据(fact)输⼊Working Memory。
(2)使⽤Pattern Matcher⽐较规则库(rule base)中的规则(rule)和数据(fact)。
(3)如果执⾏规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放⼊冲突集合。
(4)解决冲突,将激活的规则按顺序放⼊Agenda。
(5)使⽤执⾏引擎执⾏Agenda中的规则。
重复步骤2⾄5,直到执⾏完毕所有Agenda中的规则。
上述即是规则引擎的原始架构,Java规则引擎就是从这⼀原始架构演变⽽来的。
Drools是基于正向推理的规则引擎。
正向推理是数据驱动的,facts事实被传递到⼯作空间中,在那⾥有⼀个或多个规则与这些事实匹配,并由Agenda安排执⾏—我们从⼀个事实开始,传递事实,最后得到⼀个结论。
drools使用数据库存储规则Drools是一个业务规则管理系统(BRMS)解决方案,它允许业务规则在业务环境中进行管理、部署和执行。
Drools提供了基于规则引擎的框架,允许业务规则与业务逻辑分离,使业务规则可以根据业务需求进行动态更改。
在Drools中,规则通常存储在`.drl`文件中,这些文件包含了业务规则的声明和逻辑。
然而,Drools也支持从数据库中加载和存储规则。
以下是如何使用数据库存储和加载规则的基本步骤:1. 设置数据库连接:首先,你需要设置数据库连接。
这通常涉及到配置JDBC 驱动、URL、用户名和密码等。
2. 创建数据库表:你需要创建一个表来存储规则。
这个表通常会有一些字段,如规则ID、规则名称、规则描述等。
3. 加载规则:在Drools中,你可以使用`ksession.getKieBase().add打包资源`.drl`文件`方法来添加规则文件。
但是,如果你想从数据库中加载规则,你需要编写一个自定义的`KieServices`实现,该实现可以从数据库中读取规则并返回一个`KieModule`对象。
4. 使用数据库存储规则:你也可以使用数据库来存储和更新规则。
这通常涉及到将`.drl`文件的内容存储到数据库表中,并使用自定义的`KieServices`实现来从数据库中读取规则。
5. 更新KieBase:当你从数据库中加载了新的规则后,你需要更新`KieBase`以反映这些更改。
6. 使用规则:最后,你可以像往常一样使用Drools来触发规则,并根据规则的结果执行相应的逻辑。
需要注意的是,直接从数据库存储和加载规则可能会对性能产生影响,特别是当你有大量的规则或频繁的规则更新时。
因此,在使用这种方法之前,请确保它适合你的业务需求和环境。
drools规则引擎用法
Drools是一个基于Java的规则引擎,可以将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。
下面是使用Drools规则引擎的一般步骤:
1. 创建一个KModule配置文件,用于指定规则文件所在的目录以及默认的规则引擎等。
KModule配置文件的名称和位置都是固定的,不能更改。
2. 在KModule配置文件中,创建一个KBase元素,用于指定规则库的名称、规则文件的目录以及是否为默认规则库等。
3. 在KBase元素中,创建一个或多个KSession元素,用于指定规则执行会话的名称、是否为默认会话以及选择器等。
4. 编写规则文件,使用Drools的语法编写业务决策。
规则文件可以使用任何文本编辑器创建,并存储在指定的目录中。
5. 加载规则文件到Drools规则引擎中。
可以使用Drools提供的API进行加载,也可以在KModule配置文件中指定加载的规则文件。
6. 创建事实对象,将需要匹配的数据封装到事实对象中。
7. 将事实对象放入工作内存中,并触发规则执行。
可以使用Drools提供的API进行触发,也可以在KSession配置文件中指定触发器。
8. 规则执行后,会返回执行结果。
可以根据需要处理执行结果。
以上是使用Drools规则引擎的一般步骤,具体实现方式可能会因项目需求和开发环境而有所不同。
drools事实匹配规则流程Drools 事实匹配规则流程Drools 是一个开源的业务规则管理系统 (BRMS),它使用基于Rete 算法的事实匹配规则引擎。
这个引擎将事实与规则进行匹配,以确定哪些规则应该被触发。
事实匹配规则流程涉及以下步骤:1. 创建事实事实是系统中关于特定对象的陈述。
它们通常表示业务实体或事件。
事实可以是简单的数据值(例如,整数或字符串)或更复杂的对象。
2. 将事实插入工作内存工作内存是 Drools 中存储事实的临时存储区。
事实被插入工作内存后,引擎将开始评估它们是否与任何规则匹配。
3. 评估规则引擎使用 Rete 算法快速高效地评估规则。
Rete 算法将规则转换为一个网络结构,其中节点表示规则中的条件,而边表示条件之间的逻辑关系。
4. 激活规则当引擎发现一个事实与所有规则条件都匹配时,就会激活该规则。
激活的规则被放入激活列表中。
5. 执行规则动作激活的规则被逐一执行。
规则动作可以是修改事实、插入或删除新事实,或调用外部函数。
6. 循环匹配引擎不断循环匹配规则,直到工作内存中没有更多事实或没有更多规则可以匹配。
Drools 匹配策略Drools 提供了两种匹配策略:先发制人匹配:引擎会立即尝试匹配所有规则。
这是默认的匹配策略,它可以提供最佳性能。
惰性匹配:引擎只匹配在满足特定条件时触发的规则。
这可以减少不必要的匹配,但可能会降低性能。
性能优化事实匹配规则流程可以针对性能进行优化:使用索引:为事实添加索引可以加快匹配过程。
优化规则:使用最少的规则条件和最有效的逻辑运算符。
使用编译模式:编译规则可以提高引擎的性能。
示例以下是一个简单的 Drools 规则:```rule "Discount Rule"whenItem( price > 100 )thenItem( discount = 0.10 )end```当插入具有价格大于 100 的 Item 事实时,此规则将触发。
Drools规则引擎⼊门指南(⼀)最近项⽬需要增加风控系统,在经过⼀番调研以后决定使⽤Drools规则引擎。
因为项⽬是基于SpringCloud的架构,所以此次学习使⽤了SpringBoot2.0版本结合Drools7.14.0.Final版本。
引⼊依赖1 2 3 4 5 6 7 8 9 10<dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId> <version>7.14.0.Final</version> </dependency><dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId> <version>7.14.0.Final</version> </dependency>创建配置类1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57@Configurationpublic class DroolsAutoConfiguration {private static final String RULES_PATH = "rules/";@Bean@ConditionalOnMissingBean(KieFileSystem.class)public KieFileSystem kieFileSystem() throws IOException {KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();for (Resource file : getRuleFiles()) {kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8")); }return kieFileSystem;}private Resource[] getRuleFiles() throws IOException {ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();return resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "**/*.*");}@Bean@ConditionalOnMissingBean(KieContainer.class)public KieContainer kieContainer() throws IOException {final KieRepository kieRepository = getKieServices().getRepository();kieRepository.addKieModule(new KieModule() {public ReleaseId getReleaseId() {return kieRepository.getDefaultReleaseId();}});KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());kieBuilder.buildAll();return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());}@Bean@ConditionalOnMissingBean(KieBase.class)public KieBase kieBase() throws IOException {return kieContainer().getKieBase();}@Bean@ConditionalOnMissingBean(KieSession.class)public KieSession kieSession() throws IOException {KieSession kieSession = kieContainer().newKieSession();return kieSession;}@Bean@ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)public KModuleBeanFactoryPostProcessor kiePostProcessor() {return new KModuleBeanFactoryPostProcessor();}public KieServices getKieServices() {System.setProperty("drools.dateformat","yyyy-MM-dd");return KieServices.Factory.get();}}在这个时候我们的基本环境已经搭建好了,接下来我们⼀起来学习Drools吧HelloWord程序员的世界⾥,我们学习任何⼀门语⾔都是以HelloWord开启的,本次学习也不例外。