Springboot 集成 urule

最近公司准备启动一个风险系统, 架构中用到 urule 与 flowable, 捣鼓了好几天, 踩了很多坑, 算是初步写出一个 demo, 顺手记录一下

Urule2

URule 是一款基于 RETE 算法纯 Java 的开源规则引擎产品,提供了向导式规则集、脚本式规则集、决策表、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于 WEB 的设计器,可快速实现规则的定义、维护与发布。用来替换原有的 drools 规则引擎, 有一部分原因是因为 URule 自带了配置规则的 UI 界面 本例中采用 urule 客户端与服务端分离的设计

Urule Server

urule 的 Server 端, 用来配置规则 (知识包), 并暴露给客户端, 本例中知识库存储在 mysql 数据库中 springboot 的配置可以详见 URule 官方文档

http://wiki.bsdn.org/display/urule2/

1. 配置 Urule Servlet

URuleServletRegistration.java

@Component
public class URuleServletRegistration {@Beanpublic ServletRegistrationBean registerURuleServlet(){return new ServletRegistrationBean(new URuleServlet(),"/urule/*");}
}

2. 配置 urule 知识库数据源、导入配置文件

application.yml

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/world?useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 1234jackson:default-property-inclusion: non_nullurule:repository:databasetype: mysqldatasourcename: datasourceserver:port: 8787

Config.java

@Configuration
@ImportResource({"classpath:urule-console-context.xml"})
@PropertySource(value = {"classpath:urule-console-context.properties"})
public class Config {@Beanpublic PropertySourcesPlaceholderConfigurer propertySourceLoader() {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();configurer.setIgnoreUnresolvablePlaceholders(true);configurer.setOrder(1);return configurer;}@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource datasource() {return DataSourceBuilder.create().build();}
}

3. 启动 Application 类

Application.java

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

访问地址:http://localhost:8787/urule/frame 即可看到 urule 的规则配置页面

Urule Client

Urule 的客户端, 即调用规则的一方

1. 配置 urule 知识库地址

application.yml

urule:resporityServerUrl: http://localhost:8787knowledgeUpdateCycle: 1server:port: 7878

2. 引入 urule 配置文件

RuleConfig.java

@Configuration
@ImportResource({"classpath:urule-core-context.xml"})
public class RuleConfig {@Beanpublic PropertySourcesPlaceholderConfigurer propertySourceLoader() {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();configurer.setIgnoreUnresolvablePlaceholders(true);configurer.setOrder(1);return configurer;}
}

3. 配置 KnowledgePackageReceiverServlet

此 Servlet 用于接收 Urule 服务端发布的知识包 (不想用这个功能可以不配)

URuleServletRegistration.java

@Component
public class URuleServletRegistration {@Beanpublic ServletRegistrationBean registerURuleServlet(){return new ServletRegistrationBean(new KnowledgePackageReceiverServlet(),"/knowledgepackagereceiver");}
}

4. 启动 Application 类

RuleApplication.java

@SpringBootApplication
public class RuleApplication {public static void main(String[] args) {SpringApplication.run(RuleApplication.class, args);}
}

到这里 Urule 的服务端和客户端就都配置完了。

测试规则

由于嫌官方文档的 sample 太麻烦, 这里我自己写了个简单的规则作为测试用途

1. 添加规则 & 发布

配置参数

配置规则

大于 50 的数会乘以 10, 小于 50 的数会除以 2

配置推送客户端

发布知识包

2. 编写 Controller 测试

RuleController.java

@RestController
public class RuleController {@RequestMapping("rule")public String rule(@RequestParam String data) throws IOException {//创建一个KnowledgeSession对象KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("aaa/bag");KnowledgeSession session = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);Integer integer = Integer.valueOf(data);Map<String, Object> param = new HashMap();param.put("var", integer);session.fireRules(param);Integer result = (Integer) session.getParameter("var");return String.valueOf(result);}
}

访问 http://localhost:7878/rule?data=50 和 http://localhost:7878/rule?data=40可以看到页面上分别打印 500 和 20, 执行规则成功


源码地址

https://github.com/worstEzreal/urule_springboot


作者:worstezreal

来源链接:

https://blog.csdn.net/worstezreal/article/details/78968710

最近公司准备启动一个风险系统【Springboot + urule 】相关推荐

  1. linux进程管理工具supervisor安装卸载、子配置文件详解、遇到的问题、supervisor group群组管理、启动一个springboot项目示例、update命令注意点

    简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

  2. 今天带你体验79毫秒启动一个SpringBoot项目

    大家好,我是雷小帅,今天来个项目实战. 先抛一个问题,大家在自己电脑上启动一个 spring boot 项目需要花费多久? 根据项目大小和机器环境,花费几秒到几十秒的人应该都有. 最近 spring ...

  3. 克莱门特公司在俄罗斯一个数据中心安装其新型冷却系统

    日前,欧洲知名制冷厂商克莱门特公司在俄罗斯一个新建的数据中心安装部署了其冷却系统.这个位于雅罗斯拉夫尔数据中心达到了UptimeInstitute的TierIII级可靠性水平.该数据中心设施是一个大型 ...

  4. windows 只能同时 启动一个_一个u盘能否刻入win 7、win10等多个系统?该怎么做?...

    一个u盘里是否可以刻入win 7.win10等多个系统iso?如果是制作U盘系统(口袋系统)的话,那只能安装一个windows系统,如:通过win to go这个工具来制作U盘系统:如果只是把U盘当成 ...

  5. 为方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息......

    为方便旅客,某航空公司拟开发一个机票预定系统.旅行社把预定机票的旅客信息(姓名.性别.工作单位.身份证号码.旅行时间.旅行目的地等)输入进入该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起 ...

  6. 想找人帮公司开发一个ERP系统

    公司想根据公司情况制作一个生产经营的ERP系统,有没有大神们有这方面经验的?自己也不太懂要怎么发布消息,也请高手指点,谢谢

  7. 3.为方便旅客,某航空公司拟开发一个机票预订系统。写出问题定义并分析此系统的可行性。

    3.为方便旅客,某航空公司拟开发一个机票预订系统.旅行社把预订机票的旅客信息(姓名.性别.工作单位.身份证号码,旅行时间,旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机 ...

  8. python开发的著名软件公司_软件开发公司_软件外包_项目外包平台基于Python开发一个全文检索系统...

    基于Python开发一个全文检索系统.功能要求为: 使用全文检索引擎对文本进行检索.文本的格式为Word.PDF.TXT. 同时按数据域进行复合条件检索.数据域指文本对应的信息,例如创建人.文件编号. ...

  9. 我找到了一个快速定位SpringBoot接口超时问题的神器!

    文章来源:https://juejin.cn/post/7140462361759973384 背景 公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着 ...

  10. 实现一个任务调度系统,这篇文章就够了

    阅读一篇「定时任务框架选型」的文章时,一位网友的留言电到了我: 我看过那么多所谓的教程,大部分都是教"如何使用工具"的,没有多少是教"如何制作工具"的,能教&q ...

最新文章

  1. Barts PE Builder——Windows系统维护完全图形化攻略
  2. 软件架构中的分层技术
  3. Mysql数据库表内外键关联的问题
  4. elasticsearch 5.x Delete By Query API(根据条件删除)
  5. java值传递试题_面试题:java参数传递 | 学步园
  6. C#递归遍历指定目录下文件和文件夹
  7. 优先体验重播matlab_如何为深度Q网络实施优先体验重播
  8. 在Lua中“优雅”地使用Protobuf
  9. 基于linux搭建zmodem服务
  10. JavaSwing编程总结
  11. Unable to connect to test manager on xxxxx (The device is passcode protected)
  12. 内存不能为read或written的解决方案
  13. Android 人脸识别签到(二)
  14. 微信公众平台账号找回方法
  15. 光猫和路由器(联通)
  16. gcc 内联汇编用法介绍
  17. div布局根据内容自适应宽度
  18. Springboot 小巧简便的限流器使用 RateLimiter
  19. halcon算子之difference
  20. Opencv学习笔记 图像拼接一全景拼接

热门文章

  1. 51单片机彩灯控制器c语言代码,【原创】第九届蓝桥杯单片机:彩灯控制器源程序和题目...
  2. 97、锐捷交换机常用配置命令汇总
  3. win7计算机无法连接投影仪,Win7电脑如何连接投影仪?投影仪连接电脑用什么线连接?...
  4. telnet登陆入门
  5. 巴菲特致股东的一封信:2007年
  6. 网吧服务器发消息,网吧盗号常见途径总结以及解决办法
  7. 个人网站,添加对方为好友,QQ临时对话设置方法
  8. [转载]注册电气工程师(供配电)执业资格考试基础考试大纲
  9. JAVA ANDROID电脑开发环境配置,说多了都是泪
  10. python爬虫:获取12306网站火车站对应三字码