Drools与动态加载规则文件
Drools简介
Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文件中,使规则的变化不需要修改代码,重新启动机器即可在线上环境中生效。
规则引擎实现了业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入、解释业务规则,以及基于业务规则做出业务决策,从而提供极大的编程便利。
对系统使用人员来说:
- 将业务规则的创建、修改、维护透明话;
- 提高业务灵活度;
- 减少对开发人员的依赖;
- 避免业务升级带来的风险
对开发人员来说:
- 增加代码灵活性;
- 降低系统维护成本,提高系统可维护性;
- 解耦业务与规则,减少代码修改成本;
- 简化系统架构,优化应用结构;
Drools架构图
快速开始
1. Maven导入
<drools.version>7.23.0.Final</drools.version>
<lombok.version>1.18.2</lombok.version>
<dependency>
<groupId>org.kie.server</groupId>
<artifactId>kie-server-client</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
2.Java整合
框架: spring-boot 、Lombok
@Data
public class Person {
private String name;
private int age;
}
3.drl文件的编写,resources下创建rules目录,并编写
import com.mkun.drools.bean.Person; //导入对应bean [?*]
dialect "mvel"
rule "drools-test"
when
$person: Person(age < 16 || age > 50)
then
System.out.println("该人员年龄不符合规则");
end
在对应路径添加Kie文件,resources下创建META-INF文件夹,并且创建文件kmodule.xml
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="rules">
<ksession name="all-rules"/>
</kbase>
</kmodule>
4.编写Test测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class DroolsApplicationTests {
private static KieContainer container = null;
private KieSession statefulKieSession = null;
@Test
public void contextLoads() {
KieServices services = KieServices.Factory.get();
container = services.getKieClasspathContainer();
statefulKieSession = container.newKieSession("all-rules");
Person person = new Person();
person.setAge(15);
person.setName("Drools");
statefulKieSession.insert(person);
statefulKieSession.fireAllRules();
statefulKieSession.dispose();
}
}
5.动态加载规则
@RunWith(SpringRunner.class)
@SpringBootTest
public class DroolsApplicationTests {
private static KieContainer container = null;
private KieSession statefulKieSession = null;
@Test
public void contextLoads() {
String myRule = "import com.asiainfo.bean.Person\n" +
"\n" +
"dialect \"mvel\"\n" +
"\n" +
"rule \"age\"\n" +
" when\n" +
" $person : Person(age<16 || age>50)\n" +
" then\n" +
" System.out.println(\"这个人的年龄不符合要求!(基于动态加载)\");\n" +
"end\n";
KieHelper helper = new KieHelper();
helper.addContent(myRule, ResourceType.DRL);
KieSession ksession = helper.build().newKieSession();
Person person = new Person();
person.setAge(12);
person.setName("Test");
ksession.insert(person);
ksession.fireAllRules();
ksession.dispose();
}
}
上述测试说明Drools可以基于字符串配置规则,那么我们在开发时就可以将自己配置的规则存到数据库等存储介质中,实时调用动态加载配置规则。
示例demo和相关学习资料会同步上传,需要的同学移步下。谢谢支持!!!!
添加 回复 “drools-demo” 获取示例代码
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容