Слюни- Когда мои одноклассники не сказали мне, я никогда не слышал об этой штуке, и я не знал, что это такое, поэтому я пополнял сухой корм поздно ночью....
Введение в слюни
Слюни просто правила, он живет по правилам. Для некоторых сложных и изменчивых бизнес-сценариев недостаточно полагаться на наши повседневные суждения.Правила меняются быстро.При неконтролируемых факторах (погода, даты, деятельность и т. д.) правила также меняются, и проект становится невозможным. чтобы изменить строку с ним.
Drools — это один из механизмов правил, который соответствует текущим изменениям бизнес-сценариев. Как только данные удовлетворяют условию сопоставления, будет выполнена соответствующая логическая обработка:
when 满足什么样的条件
then 最终的结果
Зачем вам нужны правила, чтобы действовать?
В некоторых простых и несложных системах для оценки необходимы только условные операторы, и нет необходимости вводить механизм правил. Однако для огромного бизнес-сценария и проекта, где в каждый момент времени каждый день могут быть задействованы разные правила, это не соответствует текущей ситуации. Это только доставит разработчикам и людям, занимающимся продуктом, головную боль.
Бизнес-правила часто следуют следующим принципам:
- они независимы
- их легко обновить
- Минимальный объем информации, необходимый для каждого элемента управления правилом
- Они позволяют людям из разных слоев общества сотрудничать
Процесс выполнения Drl
Механизм правил Drools преобразует бизнес-правила в деревья выполнения:
Введение в простое демо
Я просто реализовал небольшую локальную демонстрацию, которая представляет собой простое введение в текущий механизм правил.
Текущая иерархия каталогов проекта
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── montos
│ │ │ ├── DroolsStartApplication.java
│ │ │ ├── controller
│ │ │ │ └── TestController.java
│ │ │ ├── entity
│ │ │ │ └── Message.java
│ │ │ ├── impl
│ │ │ │ └── DroolsServiceImpl.java
│ │ │ └── service
│ │ │ └── DroolsService.java
│ │ └── resources
│ │ ├── META-INF
│ │ │ └── kmodule.xml
│ │ └── rules
│ │ └── Helloworld.drl
│ └── test
│ └── java
└── target
├── classes
│ ├── META-INF
│ │ └── kmodule.xml
│ ├── com
│ │ └── montos
│ │ ├── DroolsStartApplication.class
│ │ ├── controller
│ │ │ └── TestController.class
│ │ ├── entity
│ │ │ └── Message.class
│ │ ├── impl
│ │ │ └── DroolsServiceImpl.class
│ │ └── service
│ │ └── DroolsService.class
│ └── rules
│ └── Helloworld.drl
└── generated-sources
└── annotations
pom.xml зависимости
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>7.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>7.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-templates</artifactId>
<version>7.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>7.0.0.Final</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
класс serviceImpl
public class DroolsServiceImpl implements DroolsService {
@Override
public String fireRule() {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
Message message = new Message();
message.setMessage("Good Bye");
message.setStatus(Message.GOODBYE);
kSession.insert(message);//插入
kSession.fireAllRules();//执行规则
kSession.dispose();
return message.getMessage();
}
}
kmodule.xml
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="ksession-rules"/>
</kbase>
</kmodule>
Helloworld.drl
package com.montos.drools.test1 #虚拟包名,不一定需要与物理存在的包名一致
import com.montos.entity.Message
dialect "mvel" # 方言 默认是java
rule "Hello World" # 规则名
dialect "mvel"
when
m : Message(status.equals(Message.HELLO), message : message )#条件
then
System.out.println( message);#动作
modify ( m ) { message = "Goodbye cruel world",status = Message.GOODBYE }; //更新语句,会导致引擎重新检查所有规则是否匹配条件,而不管其之前是否执行过
end
rule "Good Bye"
dialect "java"
when
Message( status == Message.GOODBYE, message : message )
then
System.out.println( message );
end
Вышеприведенное является кратким введением в некоторые важные коды.service
Логика в классе реализации, получить настроенную политику правил, а затем в соответствии сdrl
Правила и политики в файле управляют результатами.
Вышеприведенное является кратким введением в текущую версию Drools.Большая часть информации в Интернете посвящена простым знакомствам с API и аналогичным текущим представлениям, но для сложных бизнес-сценариев нет демонстрации. У кого есть информация, поделитесь со мной, буду очень благодарен.
Часть информации в статье взята из:blog.CSDN.net/ешьте нежные тычинки/art…