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相关推荐

  1. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  2. SpringBoot集成FreeMarker

    给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可. 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: &l ...

  3. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  4. springboot 集成logback

    springboot 集成logback 1.application.properties配置文件指定logback.xml logging.config=classpath:logback.xml ...

  5. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题

    springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...

  6. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null) 参考文章: (1)SpringBoot集成Quartz(解决@Autowired空指针Nu ...

  7. SpringBoot集成全局异常处理

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot集成全局异常处理 前言 对于通常的MVC项目,大量的异常需要我们去处理,如此一来,我们的 Controll ...

  8. dubbo web工程示例_dubbo实战之二:与SpringBoot集成

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

  9. php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...

    本篇文章给大家带来的内容是关于SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们在SpringBoot项 ...

  10. 13.9 SpringBoot集成Swagger2中遇到的问题

    13.9 SpringBoot集成Swagger2中遇到的问题 我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html ...

最新文章

  1. jenkins配置git
  2. R语言ggplot2可视化为长文本轴标签自动换行美化可视化结构实战:Wrap long text axis labels
  3. redis中有key但是删不掉_一篇图文,搞定Redis事务
  4. Unity3D学习笔记(四)Unity的网络基础(C#)
  5. MySQL入门篇(含数据库的备份)
  6. UWP x:bind
  7. UI5 datajs.js response handling
  8. Andriod下音频的相关操作
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业计划管理系统
  10. 【报告分享】2020数字人民币发展研究报告.pdf(附下载链接)
  11. 哈希表查找失败的平均查找长度_面试官:哈希表都不知道,你是怎么看懂HashMap的?...
  12. 康熙字典收录多少汉字_《康熙字典》一共有多少个字
  13. IEC 60601-1-2020 最新英文-医疗电气设备--第1部分 基本安全性及性能的一般要求
  14. 探索式测试之隐喻(篮球)
  15. 仿钉钉考勤统计圆形控件
  16. 真核生物基因结构 mRNA结构
  17. Illegal base64 character 20
  18. android 手机超频降频秘籍
  19. 那些不能在一起吃的水果搭配
  20. 并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)

热门文章

  1. 全国计算机三级网络技术题库南开,计算机三级上机:适用于三级网络技术、数据库等(南开100题)...
  2. 台式计算机如何连接投影仪,台式机PC怎样与投影仪连接
  3. Photoshop CS3 中文版安装教程
  4. 基于WinForm开发的Ribbon界面案例
  5. c语言中%d %%d %%%d和\\%d的区别
  6. 14种最佳的PHP帮助台脚本和5种免费选项
  7. 在线编辑Word——插入公式
  8. TCPMP-interface相关文件函数解析-Mediainfo.c
  9. IBM P系列小型机HMC默认IP地址
  10. 世嘉MD游戏开发【一】:win10环境下配置SGDK