Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lexinda/veryrule
具有简单、灵活、可复用、可编排、可配置特定场景等特性的规则引擎
https://github.com/lexinda/veryrule
java rule spring spring-boot veryrule vue3
Last synced: about 2 months ago
JSON representation
具有简单、灵活、可复用、可编排、可配置特定场景等特性的规则引擎
- Host: GitHub
- URL: https://github.com/lexinda/veryrule
- Owner: lexinda
- License: apache-2.0
- Created: 2022-03-07T01:24:06.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-24T03:27:32.000Z (over 1 year ago)
- Last Synced: 2024-04-25T18:41:34.851Z (8 months ago)
- Topics: java, rule, spring, spring-boot, veryrule, vue3
- Language: Java
- Homepage:
- Size: 400 KB
- Stars: 7
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# veryrule ![image](https://portrait.gitee.com/uploads/avatars/user/40/122663_lexindasoft_1647328799.png!avatar30)
## 特性
- 可设置单个规则或配置规则包路径- 可单行代码调用
- 可自定义监听器
- 可测试规则是否触达
- 可注解调用(结合spring开启切面)
- 可自定义注解配置和取值
- 可使用线程池处理带返回值的条件(异步)规则
- 可使用内置规则流工具创建场景及规则流
- 可使用内置规则流工具编辑条件规则执行顺序(无返回值规则、带返回值(同步)规则)
## 规则管理工具(veryrule-platform)
- 规则流管理:新增、编辑、删除、禁用、复制、
查看规则模板、编辑规则模板、删除规则模板、
测试、场景、接口文档
- 规则场景:新增、编辑、删除。
- 规则管理:新增、编辑、删除。
- 规则工具:检测创建未使用的规则## 使用
```
//定义不带返回值条件
@Rule(code = RuleCode.NOTNULL,name = "指定key不可为空", desc = "指定key不可为空", type = RuleType.CONDATION)
public class NotNullRuleCondation implements IRuleCondation {
@Override
public void contation(Map param, R rule) throws Exception {
String ruleKey = rule.getRuleKey();
String[] keys = null;
if(ruleKey.indexOf(",")>0) {
keys = ruleKey.split(",");
}else {
keys = new String[] {ruleKey};
}
for(String key :keys) {
Object data = param.get(key);
if(data==null) {
throw new Exception(key+rule.getRuleErrMsg());
}else {
if("".equals(data.toString().trim())) {
throw new Exception(key+rule.getRuleErrMsg());
}
}
}
}
//可覆盖,自定义
//@Override
//public Map ruleTest(R rule) {
// Map result = new HashMap();
// Rule ruleAnnotation = this.getClass().getAnnotation(Rule.class);
// if(rule!=null&&rule.getRuleCode().equals(ruleAnnotation.code())) {
// result.put(rule.getRuleCode(), ruleAnnotation.name());
// }
// return result;
//}
}
//初始化
//可指定规则类
VeryRule veryRule = VeryRule.builder().condation(NotNullRuleAction.class).resultCondation(...).action(...).listener(...);
//可指定规则包路径
VeryRule veryRule = VeryRule.builder().rulePackage("com.lexinda.veryrule.base").listener(TestRuleListener.class)
//单独使用
Map param = new HashMap<>();
param.put("a", "123a");
RuleBo nn = new RuleBo("notNull", "a,c", "", "不可为空",RuleType.CONDATION);
veryRule.fire(param, nn);
//匹配spring
//匹配spring-boot
//veryrule包路径
veryrule.rulePackage=com.lexinda.veryrule.base
//读取集成规则
veryrule.loadDefaultRule=true
//开启注解
veryrule.useAspect=true
//自定义切面(取值,校验...)
veryrule.aspectBean=com.lexinda.veryrule.aspect.VeryRuleAspect
//自定义监听器
veryrule.listenerBean=com.lexinda.veryrule.platform.listener.VeryRuleListener
//springAOP-单个规则,规则类型缺省为不带返回值的条件
@VeryRuleSingle(ruleCode = RuleCode.NOTNULL, ruleKey = "currentPage,ruleType", ruleErrMsg = "不能为空")
//springAOP-编排规则流
@VeryRuleFlow(ruleFlowCode = "test")
```