Springboot集成urule
Springboot集成urule
最近公司准备启动一个风险系统,架构中用到urule与flowable,捣鼓了好几天,踩了很多坑,算是初步写出一个demo,顺手记录一下
Urule2
URule是一款基于RETE算法纯Java的开源规则引擎产品,提供了向导式规则集、脚本式规则集、决策表、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的定义、维护与发布。
用来替换原有的drools规则引擎,有一部分原因是因为URule自带了配置规则的UI界面
本例中采用urule客户端与服务端分离的设计
Urule Server
urule的Server端,用来配置规则(知识包),并暴露给客户端,本例中知识库存储在mysql数据库中
springboot的配置可以详见URule官方文档
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
Springboot集成urule相关推荐
- Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源
全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...
- SpringBoot集成FreeMarker
给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可. 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: &l ...
- springboot集成swagger2测试接口
springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...
- springboot 集成logback
springboot 集成logback 1.application.properties配置文件指定logback.xml logging.config=classpath:logback.xml ...
- springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...
- SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null) 参考文章: (1)SpringBoot集成Quartz(解决@Autowired空指针Nu ...
- SpringBoot集成全局异常处理
2019独角兽企业重金招聘Python工程师标准>>> SpringBoot集成全局异常处理 前言 对于通常的MVC项目,大量的异常需要我们去处理,如此一来,我们的 Controll ...
- dubbo web工程示例_dubbo实战之二:与SpringBoot集成
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...
- php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...
本篇文章给大家带来的内容是关于SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们在SpringBoot项 ...
- 13.9 SpringBoot集成Swagger2中遇到的问题
13.9 SpringBoot集成Swagger2中遇到的问题 我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html ...
最新文章
- jenkins配置git
- R语言ggplot2可视化为长文本轴标签自动换行美化可视化结构实战:Wrap long text axis labels
- redis中有key但是删不掉_一篇图文,搞定Redis事务
- Unity3D学习笔记(四)Unity的网络基础(C#)
- MySQL入门篇(含数据库的备份)
- UWP x:bind
- UI5 datajs.js response handling
- Andriod下音频的相关操作
- 基于JAVA+SpringMVC+Mybatis+MYSQL的企业计划管理系统
- 【报告分享】2020数字人民币发展研究报告.pdf(附下载链接)
- 哈希表查找失败的平均查找长度_面试官:哈希表都不知道,你是怎么看懂HashMap的?...
- 康熙字典收录多少汉字_《康熙字典》一共有多少个字
- IEC 60601-1-2020 最新英文-医疗电气设备--第1部分 基本安全性及性能的一般要求
- 探索式测试之隐喻(篮球)
- 仿钉钉考勤统计圆形控件
- 真核生物基因结构 mRNA结构
- Illegal base64 character 20
- android 手机超频降频秘籍
- 那些不能在一起吃的水果搭配
- 并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
热门文章
- 全国计算机三级网络技术题库南开,计算机三级上机:适用于三级网络技术、数据库等(南开100题)...
- 台式计算机如何连接投影仪,台式机PC怎样与投影仪连接
- Photoshop CS3 中文版安装教程
- 基于WinForm开发的Ribbon界面案例
- c语言中%d %%d %%%d和\\%d的区别
- 14种最佳的PHP帮助台脚本和5种免费选项
- 在线编辑Word——插入公式
- TCPMP-interface相关文件函数解析-Mediainfo.c
- IBM P系列小型机HMC默认IP地址
- 世嘉MD游戏开发【一】:win10环境下配置SGDK