微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Springboot整合Urule的方法步骤

这篇文章主要介绍了Springboot整合Urule的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

摘要

Urule决策引擎可简化开发校验、决策类代码,底层由java语言实现,可基于SpringBoot快速配置,因为Urule工具目前为非常用工具,网上关于SpringBoot整合Urule资料匮乏,一直自己摸索,简单的环境搭建也费了些功夫,遇到些坑,作此记录

本次记录主要记录Urule-Serve端Urule-Client端分开部署的模式,这种使用场景也会更多;嵌入式成一个项目的配置和Urule-Server端一致。

一、Urule-Server端:

1.1、 基于maven的SpringBoot基本环境搭建请参考SpringBoot教程

1.2、引入Urule相关依赖,urule-console-pro,开源版本可到https://search.maven.org

中心搜索,依赖如下:

org.springframework.bootspring-boot-starter-webcom.bstek.uruleurule-console-pro2.1.0org.slf4jslf4j-jdk14javax.servletservlet-api2.5providedorg.mybatis.spring.bootmybatis-spring-boot-starter1.3.1com.alibabadruid1.0.9MysqLmysql-connector-java

1.3、配置文件:两个,appplication.yml   ,    application.properties

appplication.yml,配置数据库信息(我们把urule项目存到数据库中)

server: port: 8081 spring: application: name: UruleServer datasource: name: datasource jdbc-url: jdbc:MysqL://127.0.0.1:3306/urule?useUnicode=true&characterEncoding=utf-8 username: root password: 666666 # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.MysqL.jdbc.Driver filters: stat maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenevictionRunsMillis: 60000 minevictableIdleTimeMillis: 300000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20

注意,我这此刻DataSource下不jdbc-url而不是url。根据SpringBoot版本自行调整

application.properties,配置项目储存位置

#若为本地环境需配置此路径 #urule.repository.dir=F:/EclipsePractice/03_SpringCloud/repo4rule #若为数据库,配置此项,两项均不配则系统指定认地址 urule.repository.databasetype=MysqL urule.repository.datasourcename=datasource ignore-unresolvable=true order=1

1.4、初始化bean

datesource

@Configuration public class configuration { @Bean public 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(); } }

serverlet

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

1.5、启动类:

@SpringBootApplication @ImportResource({"classpath:urule-console-context.xml"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

二、客户端调用

2.1、配置类

application.yml server: port: 8090 spring: application: name: UruleClient datasource: name: datasource url: jdbc:MysqL://127.0.0.1:3306/myland?useUnicode=true&characterEncoding=utf-8 username: root password: 666666 # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.MysqL.jdbc.Driver filters: stat maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenevictionRunsMillis: 60000 minevictableIdleTimeMillis: 300000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 urule: ###服务端发现地址 resporityServerUrl: http://localhost:8081 ###kNowledgeUpdateCycle为0时,不是检查缓存,每次都从服务端拉取,为1时,会先查找缓存 kNowledgeUpdateCycle: 1

2.2、初始化bean

@Configuration public class RuleConfig { @Bean public PropertySourcesPlaceholderConfigurer propertySourceLoader() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setIgnoreUnresolvablePlaceholders(true); configurer.setorder(1); return configurer; } } @Component public class URuleServletRegistration { //此Servlet用于接收Urule服务端发布的知识包,使用开源版本时删除或者注释这个bean @Bean public ServletRegistrationBean registerURuleServlet(){ return new ServletRegistrationBean(new KNowledgePackageReceiverServlet(),"/kNowledgepackagereceiver"); } }

2.3、controller:

@RestController public class TestController { @RequestMapping("/rule") public String getRara(@RequestParam String data)throws IOException{ KNowledgeService kNowledgeService = (KNowledgeService) Utils.getApplicationContext().getBean(KNowledgeService.BEAN_ID); //参数,Urule项目名/知识包名 KNowledgePackage kNowledgePackage = kNowledgeService.getKNowledge("letasa/pare"); KNowledgeSession session = KNowledgeSessionFactory.newKNowledgeSession(kNowledgePackage); Integer integer = Integer.valueOf(data); Map param = new HashMap(); //参数,var,传入参数,和参数库中定义一致 param.put("var", integer); session.fireRules(param); //result,返回参数,和参数库中定义一致 Integer result = (Integer) session.getParameter("result"); return String.valueOf(result); } }

2.4、启动类

@SpringBootApplication @ImportResource({"classpath:urule-core-context.xml"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

Urule项目配置

参数库

规则

知识包及发布

注:Rrule-pro版本支持将知识包推送给具体客户端,客户端使用时先调用缓存,如无缓存则再到服务端拉去。但开源版本的Urule不支持推送,客户端只能主动到服务端拉去数据。

最后访问客户端:http://localhost:8090/rule?data=67,或者data=25,分别得到100,20.

success!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐