Spring cloud和规则引擎urule整合代码

本章内容其实和spring cloud没大关系,需要注册中心代码的参考前面的文章:https://blog.csdn.net/rishengcsdn/article/details/89956473

 

 

urule规则引擎是一套纯Java实现,运行时借鉴Rete了算法的优势,再结合中式规则引擎的特点,独创了一套自己的规则模式匹配算法的系统,参考文档:

http://www.bstek.com/resources/doc/

下面讲项目代码结构:

Spring cloud和规则引擎urule整合代码_第1张图片

 

项目基于Spring Cloud的框架,整合了Urule2.1.2版本的控制中心。源码下载链接:

https://download.csdn.net/download/rishengcsdn/11189599

=======================================================================

pom.xml内容:

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0
    com.ecctest
    urule
    0.0.1-SNAPSHOT
    urule


    
        
            com.bstek.urule
            urule-console
            2.1.2
            
                
                    org.slf4j
                    slf4j-jdk14
                

            

        

        
            org.springframework.boot
            spring-boot-starter-web
            1.5.3.RELEASE
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                

            
        

        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
            1.3.5.RELEASE
            
                
                    javax.servlet
                    servlet-api
                

            

        

        
            org.springframework.cloud
            spring-cloud-starter-feign
            1.3.5.RELEASE
        

        
            org.springframework.boot
            spring-boot-starter-log4j2
            1.5.3.RELEASE

        
        
            org.springframework.boot
            spring-boot-starter-mail
            1.5.3.RELEASE

        
        
            org.springframework.boot
            spring-boot-starter-freemarker
            1.5.3.RELEASE

        

        
            com.amazonaws
            aws-java-sdk-sts
            1.11.125
            
                
                    commons-logging
                    commons-logging
                

            

        

        
            com.amazonaws
            aws-java-sdk-autoscaling
            1.11.125
        

        
            com.amazonaws
            aws-java-sdk-ec2
            1.11.125
        

        
            com.amazonaws
            aws-java-sdk-route53
            1.11.125
        

        
            org.hdrhistogram
            HdrHistogram
            2.1.9
        

        
            com.fasterxml.jackson.dataformat
            jackson-dataformat-cbor
            2.8.8
        

        
            com.fasterxml.jackson.dataformat
            jackson-dataformat-xml
            2.8.8
        

        
            org.springframework.boot
            spring-boot-starter-actuator
            1.5.3.RELEASE
        

        
            com.netflix.hystrix
            hystrix-core
            1.5.12
        

        
            com.netflix.archaius
            archaius-core
            0.7.4

        
        
            org.springframework.security
            spring-security-crypto
            4.2.2.RELEASE
        

    

=======================================================================

application.properties的内容,注意本地仓库文件地址配置urule.repository.dir=D:/urule,请按照实现环境修改:

#spring-cloud
spring.profiles.active=production
spring.application.name=urule

server.port=8087

feign.hystrix.enabled=true

eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=http://localhost:1112/eureka

########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/pages/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved


#app
#urule setting --http://wiki.bsdn.org/pages/viewpage.action?pageId=75071588
urule.repository.dir=D:/urule
#urule.repository.dir=
#urule.repository.datasourcename=dataSource
#urule.repository.databasetype=mysql
# urule.repository.databasetype=oracle
urule.console.title=URule Console
urule.welcomePage=/ur/welcomePage

#locale
locale.default=zh_CN

=======================================================================

UruleApplication.java部分内容:


@ComponentScan(basePackages = "net.ecctest")
@EnableFeignClients("net.ecctest")
@EnableDiscoveryClient
@SpringBootApplication
@ImportResource({"classpath:/spring/applicationContext-urule.xml"})
public class UruleApplication extends SpringBootServletInitializer {

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

    @Bean
    public ServletRegistrationBean registerURuleServlet(){
        return new ServletRegistrationBean(new URuleServlet(), "/urule/*");
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        builder.sources(this.getClass());
        return super.configure(builder);
    }

}

=======================================================================

UruleController.java内容:

@Controller
public class UruleController {
    @Autowired
    private Invoke invoke;
    @RequestMapping(value = { "/", "/index" }, method = RequestMethod.GET)
    public String index() {
        return "redirect:/urule/frame";
    }

    @RequestMapping(value = "/ur/welcomePage", method = RequestMethod.GET)
    public String welcomePage() {
        return "welcomePage22";
    }
    
    @RequestMapping(value = "/test/testRule", method = RequestMethod.GET)
    public String testRule(ModelMap map,String bb1,String bb2) throws Exception {
        String retMsg=invoke.doTest(bb1,bb2);
        map.put("retMsg", retMsg);
        return "retPage";
    }

    @RequestMapping(value = "/test/testRuleRest", method = RequestMethod.GET)
    @ResponseBody
    public String testRuleRest(@RequestBody Bbb bbb) throws Exception {
        String retMsg=invoke.doTest(bbb.getBbb1(),bbb.getBbb2());
        
        return retMsg;
    }
}

=======================================================================

 

项目启动成功后访问:http://localhost:8087/

就可以看到规则引擎首页了

Spring cloud和规则引擎urule整合代码_第2张图片

 

具体配置规则就是拖拖拽拽,修改一些参数,这里就不详细说明了,为了避免麻烦我建议导入我的备份文件测试项目例子-urule-repo-20190520105757.bak,导入和导出可以用在测试环境到生产环境的部署上。

导入成功后应该可以看到已经编辑好的知识包,变量库,向导式决策等等文件。

 

Spring cloud和规则引擎urule整合代码_第3张图片

这个是变量库,对应于java代码的Bbb.java,代表一个业务实体。

Spring cloud和规则引擎urule整合代码_第4张图片

 

然后是一个简单规则:

Spring cloud和规则引擎urule整合代码_第5张图片

 

规则导入后,还是需要在知识包的界面上重新发布一下,刷新规则到内存。最好,在界面上仿真测试一下规则。

 

Spring cloud和规则引擎urule整合代码_第6张图片

 

最后,通过浏览器访问ctrl类,http://localhost:8087/test/testRule?bb1=15&bb2=15,

获得结果如下:

规则引擎
高性能、便捷
图形化建模、仿真测试
结果为正确

 

修改业务参数:http://localhost:8087/test/testRule?bb1=3&bb2=15

获得结果如下:

规则引擎

高性能、便捷

图形化建模、仿真测试

结果不对啊

 

相对于drools引擎,urule显得轻便很多,rest接口实现可以参考我的UruleController.java的testRuleRest()方法。

 

你可能感兴趣的:(java)