Springboot整合Urule的方法步骤

网友投稿 379 2023-01-05


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.boot

spring-boot-starter-web

com.bstek.urule

urule-console-pro

2.1.0

http:// org.slf4j

slf4j-jdk14

javax.servlet

servlet-api

2.5

provided

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.1

com.alibaba

druid

1.0.9

mysql

mysql-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!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:eclipse实现接口(eclipse实现接口方法)
下一篇:深入了解Java中的Filter过滤器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~