Spring Boot+Drools整合详解

Drools具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。目前很多企业的风控项目大多采用Drools进行规则检验,例如联通软件研究院XX系统尝试集成了drools开源引擎进行规则校验,检验速度快,取得不错的效果。
现在讲解一下如何使用Spring Boot框架集成Drools,搭建简易的检验系统。
Pom依赖:

    
	    org.drools  
		drools-core 
		7.0.0.Final
	
	
		org.drools
		drools-compiler
		7.0.0.Final
	
	
		org.kie
		kie-spring
		7.0.0.Final
	
	
		org.kie
		kie-internal
		7.0.0.Final
	
	
		org.drools
		drools-templates
		7.0.0.Final
	

创建规则:

   public class LoadRule {

   public String loadRule(){

    String drl = "package rules.test;\n" +
            "import com.cbss.microservice.domain.UserInfo;\n" +
            "import com.cbss.microservice.domain.RuleInfo;\n" +
            "dialect  \"mvel\"\n" +
            "\n" +
            "rule \"test\"\n" +
            "    when\n" +
            "      $userInfo:UserInfo(num>=5);\n" +
            "      $ruleInfo:RuleInfo();\n" +
            "    then\n" +
            "     System.out.println(\"OK!\");\n" +
            "     $ruleInfo.setResultinfo(\"该用户证件下有5个电话号码!\");\n" +
            "end";


    return drl;
}} 

检验规则:

  public String checkRule() {

  LoadRule loadRule = new LoadRule();

  System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm:ss");
  KieHelper helper = new KieHelper();
  helper.addContent(loadRule.loadRule(), ResourceType.DRL);
  long startNewKiesession = System.currentTimeMillis();
  KnowledgeBaseImpl kieBase = (KnowledgeBaseImpl) helper.build();
  long endNewKiesession = System.currentTimeMillis();
  System.out.println("创建规则库:"+ (endNewKiesession - startNewKiesession));
  KieSession kieSession = kieBase.newKieSession();

  UserInfo userInfo = new UserInfo();
  userInfo.setNum(5);
  RuleInfo ruleInfo = new RuleInfo(0);

  kieSession.insert(userInfo);
  kieSession.insert(ruleInfo);

  int icount =   kieSession.fireAllRules();

  if(icount>0){

      System.out.println("输出:" + ruleInfo.getResultinfo());

  }
    return ruleInfo.getResultinfo();
} 

注意:KieHelper是Drools提供的工具类,封装了创建规则库、加载规则、编译规则等底层代码。有时间大家可以看下它的源码。

测试规则:

 @RestControllerpublic class TestController {
    @Autowired
    private CheckRulesService checkRulesService;

    @RequestMapping(value = "/checkrules/", method = RequestMethod.POST, produces = "application/json")
    public String reloadRules( @RequestBody String msg)throws Exception {

       String result = checkRulesService.checkRule();


    return result;
}}

用postman输入地址:http://localhost:8080/checkrules/
测试结果: 测试结果
简单检验demo搭建完成

转载于:https://my.oschina.net/dragonbaby/blog/2991940

你可能感兴趣的:(Spring Boot+Drools整合详解)