简单了解
Drools是一个开源的,基于java的规则引擎,用于匹配规则。会有人问,java中 if - else 也能实现,为什么要用着一个新技术,一两个条件,当然是硬编码在程序中更为方便,但是在大量规则条件下,碰到例如电商中的优惠券,大量的规则,满减,跨店,商品限制,这种多规则切复杂度极高还会随时发生变化的情况下,使用 if - else 硬编码就会大大的增加代码的复杂性,经常变化也能导致程序的维护问题,那么这个时候就能使用到 Drools 规则引擎,从硬编码中解放出来,用规则脚本的形式存放在文件中,就算规则发生变化也不需要更改代码重启服务。
hello world
开始第一个drools demo吧。(使用的是 idea )
1、创建一个 maven 项目。
在 pom.xml 添加 drools 相关依赖
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>6.3.0.Final</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>6.3.0.Final</version>
</dependency>
2、添加配置文件
在 resources 创建目录 META-INF 和 rules
在 META-INF 目录下创建 kmodule.xml 文件,编写代码
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="session"/>
</kbase>
</kmodule>
在 rules 目录下创建 helloworld.drl 文件 ,编写代码
package helloworld
rule "helloworld"
when
eval(true)
then
System.out.println("HelloWorld");
end
完成后目录结构
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5oYW9fY19o_size_16_color_FFFFFF_t_70][]
3、编写测试类
public class HelloworldTest {
@Test
public void testHelloWorld() {
// KieServices就是一个中心,通过它来获取的各种对象来完成规则构建、管理和执行等操作。
KieServices kieServices = KieServices.Factory.get();
// 个知识仓库(包含了若干的规则、流程、方法)的容器。
KieContainer kieContainer = kieServices.newKieClasspathContainer();
// 与drools引擎打交道的会话。
KieSession kieSession = kieContainer.newKieSession("session");
// 执行所有规则,返回满足规则的数量
int i = kieSession.fireAllRules();
System.out.println(i);
// 销毁对象
kieSession.dispose();
}
}
4、执行,查看控制台

还没有评论,来说两句吧...