Spring Boot+Drools规则引擎整合详解

目的

官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少。

本文介绍如何在Spring Boot项目上加上Drools规则引擎。

POM依赖

POM文件如下:


 4.0.0

 com.galaxyyao
 springbootdroolstest1
 1.0.0
 jar

 springbootdroolstest1
 http://maven.apache.org

 
  UTF-8
  1.8
 

 
  org.springframework.boot
  spring-boot-starter-parent
  1.5.2.RELEASE
 
 
  
   org.springframework.boot
   spring-boot-starter-web
  

  
   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
  
 
 
  
   
    maven-compiler-plugin
   
   
    org.springframework.boot
    spring-boot-maven-plugin
   
   
    org.codehaus.mojo
    exec-maven-plugin
    
     java
     
      com.galaxyyao.springbootdroolstest1.SpringBootDroolsTest1Application
     
    
   
  
 


其中比较需要注意的是使用了exec-maven-plugin插件,不然无法启动

引用的Drools包的版本可以自行调整。

Resources

在src/main/resources下添加两个目录:

META-INF和rules

META-INF下添加kmodule.xml,内容如下:


 
  
 

rules目录下添加一个简单的Hello World规则

package com.galaxyyao.springbootdroolstest1
import com.galaxyyao.springbootdroolstest1.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.galaxyyao.springbootdroolstest1.domain;

public class Message {
 public static final Integer HELLO = 0;
 public static final Integer GOODBYE = 1;

 private String message;

 private Integer status;

 public String getMessage() {
  return this.message;
 }

 public void setMessage(String message) {
  this.message = message;
 }

 public Integer getStatus() {
  return this.status;
 }

 public void setStatus(Integer status) {
  this.status = status;
 }
}

Service层

Service层负责实际运行规则:

package com.galaxyyao.springbootdroolstest1.service;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.springframework.stereotype.Service;

import com.galaxyyao.springbootdroolstest1.domain.Message;

@Service
public class 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();
 }
}

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

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