62 springboot 结合Drools 规则

62 springboot 结合Drools 规则_第1张图片
image

https://blog.csdn.net/kisscatforever/article/details/80784675

https://blog.csdn.net/wo541075754/article/details/76566016
https://blog.csdn.net/moshowgame/article/details/98061651
http://www.360doc.com/content/19/0513/16/58342994_835422644.shtml
http://www.360doc.com/showweb/0/0/874593555.aspx

对于业务复杂多变的项目存在的问题

1,当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经理开发,测试验证上线等过程。,变更成本比较大。

2,长时间系统变得越来越难以维护。

3, 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及BA,但实际上却承担了将业务规则准确无误实现的重任。
4,系统僵化,新需求插入困难。
5,新需求上线周期长。
规则引擎能帮助我们什么?
我们知道了,规则引擎是为了解决复杂多变的业务,并且快速的数据计算。他可以把规则和核心业务拆开,规则单独配置。这样当我们规则变化的时候,通过修改规则文件而不用修改核心的代码了。

什么样的项目适合使用规则引擎
规则引擎使用较为广泛,并不能说只适合几个领域,应该说,在规则较为复杂的行业,都是适用的,如金融,制造,医疗,物流等行业,面临的规则较为复杂,而且对规则引擎需求的行业也越来越多、如团购平台,传统企业管理渠道等,等都存在大量快速变化的业务规则。如何快速应对,已经成为挑战,谁能快速适应,谁就能一马当先。

JBoss Drools
Drools规则引擎介绍Drools是JBoss公司旗下一款开源的规则引擎,它完整的实现了Rete算法;提供了强大的EClipsePlugin开发支持。通过使用其中的DSL(DomainSpecificLanguage),可以实现用自然语言方式来描述业务规则,使得业务分析人员也可以看懂业务规则,使得业务分析人员也可以看懂业务规则代码。最新版本Drools5提供了基于WEB的BRMS--Guvnor提供了规则管理的知识库,通过它可以实现规则的版本控制,以及规则的在线修改和编译,使得开发人员和系统管理人员可以在线管理业务规则。

SpringBoot 结合Drools实现规则引擎
宏观说说Drools文件;


62 springboot 结合Drools 规则_第2张图片
image

搭建springboot框架,引入Drools依赖;



    4.0.0

    com.wl
    drools
    0.0.1-SNAPSHOT
    jar

    drools
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.14.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.drools
            drools-core
            7.0.0.Final
        
        
            org.drools
            drools-compiler
            7.0.0.Final
        
        
            org.drools
            drools-decisiontables
            7.0.0.Final
        
        
            org.drools
            drools-templates
            7.0.0.Final
        

        
            org.kie
            kie-api
            7.0.0.Final
        

        
        
            org.projectlombok
            lombok
            1.16.20
            provided
        

        
            org.springframework.boot
            spring-boot-starter-web
        

    

    
        
            
                maven-compiler-plugin
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
                org.codehaus.mojo
                exec-maven-plugin
                
                    java
                    
                        com.galaxyyao.springbootdroolstest1.SpringBootDroolsTest1Application
                    
                
            
        
    




在src/main/resources下添加2个目录:
META-INF和rules
META-INF下添加kmodule.xml,内容如下:


   
       
   


规则文件:
rules目录下添加一个简单的hello World规则:

package com.galaxyyao.springbootdroolstest1
import com.wl.drools.domain.Message
dialect  "mvel"

rule "Hello World"
    dialect "mvel"
    when
        m : Message(status.equals(Message.HELLO), message : message )
    then
        System.out.println( message);
    modify ( m ) { message = "Goodbye cruel world",status = Message.GOODBYE };
end

rule "Good Bye"
    dialect "java"
    when
       Message( status == Message.GOODBYE, message : message )
    then
        System.out.println( message );
end

Domain层

Domain层定义一个Drools中需要使用到的Model:

package com.wl.drools.domain;

import lombok.Data;

/**
 * Created by Ares on 2018/6/23.
 */
@Data
public class Message {
    public static final Integer HELLO = 0;
    public static final Integer GOODBYE = 1;

    private String message;

    private Integer status;
}


service层:

public interface DroolsService {

    String fireRule();
}




serviceimpl层

package com.wl.drools.service.impl;

import com.wl.drools.domain.Message;
import com.wl.drools.service.DroolsService;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.springframework.stereotype.Service;

/**
 * Created by Ares on 2018/6/23.
 */
@Service("droolsService")
public class DroolsServiceImpl implements DroolsService {

    public String fireRule() {
        // load up the knowledge base
        KieServices ks = KieServices.Factory.get();
        KieContainer kContainer = ks.getKieClasspathContainer();
        KieSession kSession = kContainer.newKieSession("ksession-rules");

        // go !
        Message message = new Message();
        message.setMessage("Hello World");
        message.setStatus(Message.HELLO);
        kSession.insert(message);//插入
        kSession.fireAllRules();//执行规则
        kSession.dispose();
        return message.getMessage();
    }
}



controller层:


package com.wl.drools.controller;

import com.wl.drools.service.DroolsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    private DroolsService droolsService;

    @GetMapping("/showRults")
    public String showRults(){
        return droolsService.fireRule();
    }
    @GetMapping("/testBoot")
    public String testBoot(){
        return "123456";
    }

}










  通过访问[http://localhost:8080/test/showRults](http://localhost:8080/test/showRults),显示如下:
62 springboot 结合Drools 规则_第3张图片
image

当我们的规则发生变化的时候,我们就修改规则文件,就可以了。

你可能感兴趣的:(62 springboot 结合Drools 规则)