目的
本篇講的是Drools規(guī)則引擎的基本使用揍愁,什么是規(guī)則引擎、以及搞清楚規(guī)則引擎在什么情況下比較適合使用。Drools支持以drl
文件結(jié)尾的文件作為規(guī)則文件最域,也支持其他結(jié)尾的文件作為規(guī)則文件比如gdrl
、rdrl
锈麸、dsl
等(詳情可見ResourceType.class
)镀脂,Drools還支持工作流等其他功能,本篇主要講解的是drl
規(guī)則文件的使用忘伞,不涉及工作流等其他功能薄翅,將分為幾個章節(jié)進(jìn)行講解
準(zhǔn)備環(huán)境
JDK (版本隨意,作者使用1.8)
Maven (版本隨意氓奈,作者使用3.6.3)
IDEA (版本隨意翘魄,作者使用2020.1)
準(zhǔn)備工作
新建一個maven項(xiàng)目,打開pom.xml
導(dǎo)入Drools依賴舀奶,下面為剔除spring依賴的導(dǎo)入暑竟,沒有spring依賴的項(xiàng)目可以不導(dǎo)入kie-spring
<!--drools-->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>7.37.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>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.37.0.Final</version>
</dependency>
在maven項(xiàng)目的resources下面新建一個rules
目錄并在rules
目錄下新建demo.drl
規(guī)則文件,目錄的路徑于規(guī)則里面的包名保持一致伪节,否則會報警告雖然不影響使用
package rules
rule "test"
when
eval(true)
then
System.out.println("規(guī)則中打印日志:校驗(yàn)通過!");
end
在main
方法中添加一下代碼并運(yùn)行
public static void main(String[] args) {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
try {
Enumeration<URL> resources = Demo.class.getClassLoader().getResources("rules/demo.drl");
while (resources.hasMoreElements()){
URL url = resources.nextElement();
kieFileSystem.write(ResourceFactory.newFileResource(URLDecoder.decode(url.getPath())));
}
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSession defaultKieSession = kieContainer.newKieSession(); //等價于KieSession defaultKieSession = kieContainer.newKieSession("defaultKieSession");
defaultKieSession.fireAllRules();
defaultKieSession.dispose();
} catch (IOException e) {
e.printStackTrace();
}
}
運(yùn)行結(jié)果如下光羞,打印出了規(guī)則中的結(jié)果
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
規(guī)則中打印日志:校驗(yàn)通過!
Process finished with exit code 0