Spring Boot + URule 规则引擎,可视化配置太爽了!(2)

简介: Spring Boot + URule 规则引擎,可视化配置太爽了!

3.3规则集

说到规则集,顾名思义,就是配置规则了。前面定义的库文件就需要导入到规则集中去配置使用。它是使用频率最高的一个业务规则实现方式。


规则集说的是规则的集合,由三个部分规则组成:如果、那么、否则。


在规则集的定义的方式上,URule由向导式和脚本式两种;


向导式规则集:就是在页面上通过鼠标点点点,高度的可视化配置,不是开发都能懂,这也是这个规则引擎的亮点所在。

脚本式规则集:听名字就知道了,这玩意要写脚本的。拉高配置门槛,需要懂点编码的人来编写。

3.3.1向导式规则集

还是一样,首先新建。这次是在“决策集”菜单上右键,点击“添加向导式决策集”,这样就创建好一个规则集了。

473ef59480b99662adb39fca88c33365_ec9ea1cde93143ae83884dd5c2f60f74.png

在配置规则前,可以先导入前面定义好的库文件。我这里导入变量库文件,页面上点击“变量库”,然后选择指定的变量库文件即可。如图所示;

517851a8e45ed2caf660fc2459b249fc_56241f231c6346e081feb90b555cc4ec.png

最后,可以愉快的配置规则了,向导式没什么好讲的,都是可视化界面,点点点即可。下面是我配置的一个简单的规则集;

998d69445a2aa29c56d0066a8a7d8356_c5e948cebe134eb392f92bbdc9e2c122.png

可以看到由三部分组成:如果、那么、否则;


如果:配置规则的条件;

那么:配置满足条件后执行的动作,一般配置变量赋值比较多

否则:配置不满足条件执行的动作

最后,附上添加完规则后,通过代码去执行规则;


package com.cicada;


import cn.hutool.core.bean.BeanUtil;

import com.Result;

import com.bstek.urule.Utils;

import com.bstek.urule.runtime.KnowledgePackage;

import com.bstek.urule.runtime.KnowledgeSession;

import com.bstek.urule.runtime.KnowledgeSessionFactory;

import com.bstek.urule.runtime.service.KnowledgeService;

import com.cicada.req.StuReq;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;


import java.io.IOException;


/**

* @author 往事如风

* @version 1.0

* @date 2023/3/10 16:47

* @description

*/

@RestController

@RequestMapping("/rule")

public class RuleDataController {


   @PostMapping("/stu")

   public Result rule(@RequestBody StuReq stuReq) throws IOException {

       KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);

       KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("xxx/xxx");

       KnowledgeSession knowledgeSession = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);

       Stu stu = BeanUtil.copyProperties(stuReq, Stu.class);

       knowledgeSession.insert(stu);

       knowledgeSession.fireRules();

       return Result.success(stu.getTeacher());

   }

}

9db98b8a6ca53252883027bc65a80e4c_fd2de8196c0a4263a6fa196e07ae3855.png

9db98b8a6ca53252883027bc65a80e4c_fd2de8196c0a4263a6fa196e07ae3855.png

请求接口,最终参数符合配置的条件,返回“那么”中配置的输出结果。


3.3.2脚本式规则集

脚本式的规则集,各种原理都是和向导式一模一样,无非就是拉高门槛,用写脚本的方式去实现配置的规则。这里不做过多的介绍了。


3.4决策表

再聊下决策表,其实它就是规则集的另一种展示形式,比较相对规则集,我更喜欢用决策表去配置规则,应为它呈现的更加直观,更便于理解。但是本质和规则集没啥区别。


也不展开过多的赘述,这里我就放一张配置过的决策表;


23db96182c9d8eeb851fbeb75b8b05fe_893c4639f854408c80f4204afe28b202.png


3.5其他

当然,还有其他的概念和功能,这里也不一一介绍了,因为上面说的已经是最常用的了,想了解的可以自行去了解。其他功能包括:交叉决策表、评分卡、复杂评分卡、决策树、规则流;当然,其中有些是Pro版的功能。


四、运用场景

最近在开发一期大版本的需求,其中就有个场景,具体如下;参与购买订单的用户都会有自己的一个职级,也可以说是角色。每个用户都会有三个职位:普通用户、会员、精英会员。


然后,每个月初都会对用户进行一次晋升处理,普通用户达到要求,就会晋升为会员,会员达到要求就会晋升为精英会员。


当然,普通用户晋升会员,会员晋升精英会员,都会有不同的规则;


普通用户->会员:3个月内帮注册人数达到3人;3个月内自己和底下团队的人,下单金额超过1万;个人的订单继续率超过80%。

会员->精英会员:3个月内帮注册人数达到6人;3个月内自己和底下团队的人,下单金额超过5万;个人的订单继续率超过90%。

不能跨级晋升,普通用户最多只能到会员,达到会员了才能晋升到精英会员。

当然,这只是做过简化的一部分需求,我做过稍许的改动,真实的需求场景并没有这么简单。


下面,我对这个需求做一个规则的配置,这里用一个决策表进行配置;在配置规则前,我添加一个变量库文件和常量库;

f8369a699428a070fc995c3d36a960e0_49a0f055ed864be48d54b0047debbbed.png

1c84873090285d68c6c8ea28e4df76cc_1fbcbb4ecd1641f59adf8350b19328e8.png


最后,添加一个决策表,并进行规则配置;

269ee664b2d8b9d5b1201970f774d856_886c39df335b4963ad4f0afc90177006.png

可以看到,表格一共五列,其中前四列是规则,最后一列是满足规则后输出的信息。这样看着就很清晰,即使并不是技术人员,也可以轻松看懂其中的规则。


五、总结

规则引擎对于我们的系统而言可用可不用,它可以锦上添花,帮助我们剥离出业务中需要进行大量判断的场景。但是,这种规则的剥离,需要我们开发人员对需求进行理解,在理解的基础上进行抽象概念的具化。这,也是整个编程的必经之路。

————————————————

版权声明:本文为CSDN博主「Java技术栈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/youanyyou/article/details/130890266

相关文章
|
19天前
|
存储 Java 数据安全/隐私保护
|
4天前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
11 1
|
2天前
|
XML Java 数据格式
Spring高手之路18——从XML配置角度理解Spring AOP
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
21 6
Spring高手之路18——从XML配置角度理解Spring AOP
|
3天前
|
消息中间件 开发框架 Java
什么是Spring Boot 自动配置?
Spring Boot 是一个流行的 Java 开发框架,它提供了许多便利的功能和工具,帮助开发者快速构建应用程序。其中一个最引人注目的特性是其强大的自动配置功能。
7 0
|
6天前
|
Java Spring
Spring文件配置以及获取
Spring文件配置以及获取
13 0
|
12天前
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
22 2
|
14天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
21 1
|
14天前
|
XML Java API
Spring Boot 整合 LiteFlow 规则引擎:概念与实战
【4月更文挑战第30天】在现代软件开发中,规则引擎允许我们以声明式的方式定义业务逻辑和决策路径。LiteFlow 是一个轻量级、易于使用的组件式规则引擎,它可以与 Spring Boot 应用无缝整合。本文将介绍如何在 Spring Boot 项目中引入 LiteFlow,实现灵活的业务流程管理。
31 0
|
16天前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
23 1
|
20天前
|
Java Spring 容器
如何用基于 Java 配置的方式配置 Spring?
如何用基于 Java 配置的方式配置 Spring?