栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
 }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号