规则引擎用作可插入(pluggable)软件组件,其执行已经外部化或与应用程序代码分离的业务规则的方法。 这种将外部化或分离允许业务用户无需修改应用系统程序即可修改规则。 在处理复杂逻辑的大型分布式应用程序的情况下,可以使用规则引擎将应用程序代码与可跨分布式平台共同应用的通用规则逻辑隔离。这大大提高了系统的灵活性和稳定性。
在本文中,我们将构建Spring Boot的示例应用来演示使用 Drools 规则引擎来确定各种输入的结果。应用模拟一个招聘的场景,规则引擎通过候选人的年龄,工作经验以及技能等级等数据来决定是否录用,如果录用会产生一个工资数据。
Drools 规则引擎 (https://www.drools.org/) 是 JBoss 的开源规则引擎实现。
KIE 项目 (https://www.kie.org/about/) 允许将 Drools Rules 引擎与 Spring Boot 集成。
应用结构:
├─src
│ ├─main
│ │ ├─java
│ │ │ └─demo
│ │ │ └─drools
│ │ │ │ SpringbootDroolsApplication.java
│ │ │ │
│ │ │ ├─config
│ │ │ │ DroolsConfig.java
│ │ │ │
│ │ │ ├─controler
│ │ │ │ DroolsController.java
│ │ │ │
│ │ │ ├─model
│ │ │ │ Candidate.java
│ │ │ │ Enroll.java
│ │ │ │
│ │ │ └─service
│ │ │ DroolsService.java
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ │
│ │ └─rules
│ │ recruitment_salary.drl
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.2</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>demo</groupId>
<artifactId>springboot-drools</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-drools</name>
<description>Demo project for Spring Boot with D