1.我用的是若依的微服务前后的分离版本,jdk是8,首先是pom引入
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-core</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-support</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-mvel</artifactId>
<version>4.0.0</version>
</dependency>
2.编写了四个相关的类,实现了三种方式的规则
新建类ThreeEightRuleLauncher
做了两个方法,其中方法二里面实现了两种规则的配置
package com.asgard.task.util;/**
* 描述
*
* @author
* @date 2022/03/11 16:05:33
* @version 1.0
*/
import com.alibaba.fastjson.JSON;
import com.asgard.task.domain.Person;
import org.jeasy.rules.api.*;
import org.jeasy.rules.core.DefaultRulesEngine;
import org.jeasy.rules.mvel.MVELRule;
import org.jeasy.rules.mvel.MVELRuleFactory;
import org.jeasy.rules.support.reader.YamlRuleDefinitionReader;
import org.springframework.util.ResourceUtils;
import java.io.FileReader;
/**
*
* @param
* @author bdBoCao
* @date 2022/3/1116:05
* @version 1.0
*/
public class ThreeEightRuleLauncher {
//方法一
public static void main(String[] args) {
/**
* 创建规则执行引擎
* 注意: skipOnFirstAppliedRule意思是,只要匹配到第一条规则就跳过后面规则匹配
*/
RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true);
RulesEngine rulesEngine = new DefaultRulesEngine(parameters);
//创建规则
Rules rules = new Rules();
rules.register(new EightRule());
rules.register(new ThreeRule());
Facts facts = new Facts();
for (int i=1 ; i<=50 ; i++){
//规则因素,对应的name,要和规则里面的@Fact 一致
facts.put("number", i);
//执行规则
rulesEngine.fire(rules, facts);
System.out.println();
}
}
//方法二
// public static void main(String[] args) throws Exception {
// //创建一个Person实例(Fact)
// Person tom = new Person("Tom", 19);
// Facts facts = new Facts();
// facts.put("person", tom);
//
// //创建规则1
// Rule ageRule = new MVELRule()
// .name("age rule")
// .description("Check if persons age is > 18 and marks the person as adult")
// .priority(1)
// .when("person.age > 18")
// .then("person.setAdult(true);");
// //创建规则2
Rule alcoholRule = new MVELRuleFactory(new YamlRuleDefinitionReader()).
createRule(new FileReader(ResourceUtils.getFile("classpath:alcohol-rule.yml")));
//
// Rules rules = new Rules();
// rules.register(ageRule);
rules.register(alcoholRule);
//
// //创建规则执行引擎,并执行规则
// RulesEngine rulesEngine = new DefaultRulesEngine();
// System.out.println("Tom: Hi! can I have some Vodka please?");
// rulesEngine.fire(rules, facts);
// System.out.println(JSON.toJSONString(tom));
// }
}
新建类EightRule,这个类是上面规则里面用到的,符合条件会走这个类
package com.asgard.task.util;/**
* 描述
*
* @author
* @date 2022/03/11 15:12:18
* @version 1.0
*/
import org.jeasy.rules.annotation.*;
/**
*
* @param
* @author bdBoCao
* @date 2022/3/1115:12
* @version 1.0
*/
@Rule(name = "被8整除")
public class EightRule {
/**
* 条件
*/
@Condition
public boolean isEight(@Fact("number") int number) {
return number % 8 == 0;
}
/**
* 满足条件的动作
*/
@Action
public void eightAction(@Fact("number") int number) {
System.out.println(number + " is eight");
}
/**
* 条件判断的优先级
*/
@Priority
public int getPriority() {
return 2;
}
}
新建类ThreeRule,也是做测试用,在规则中符合条件的会走这个
package com.asgard.task.domain;/**
* 描述
*
* @author
* @date 2022/03/11 22:41:42
* @version 1.0
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* @param
* @author bdBoCao
* @date 2022/3/1122:41
* @version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private boolean adult;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
这个实体是规则中用来判断参数的
一次做一下笔记,怕以后找不到