全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

目的

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

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

POM依赖

POM文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.galaxyyao</groupId>
 <artifactId>springbootdroolstest1</artifactId>
 <version>1.0.0</version>
 <packaging>jar</packaging>

 <name>springbootdroolstest1</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <java.version>1.8</java.version>
 </properties>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.2.RELEASE</version>
 </parent>
 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.drools</groupId>
   <artifactId>drools-core</artifactId>
   <version>7.0.0.Final</version>
  </dependency>
  <dependency>
   <groupId>org.drools</groupId>
   <artifactId>drools-compiler</artifactId>
   <version>7.0.0.Final</version>
  </dependency>
  <dependency>
   <groupId>org.drools</groupId>
   <artifactId>drools-decisiontables</artifactId>
   <version>7.0.0.Final</version>
  </dependency>
  <dependency>
   <groupId>org.drools</groupId>
   <artifactId>drools-templates</artifactId>
   <version>7.0.0.Final</version>
  </dependency>

  <dependency>
   <groupId>org.kie</groupId>
   <artifactId>kie-api</artifactId>
   <version>7.0.0.Final</version>
  </dependency>
 </dependencies>
 <build>
  <plugins>
   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
   </plugin>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
     <executable>java</executable>
     <arguments>
      <argument>com.galaxyyao.springbootdroolstest1.SpringBootDroolsTest1Application</argument>
     </arguments>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

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

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

Resources

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

META-INF和rules

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

<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
 <kbase name="rules" packages="rules">
  <ksession name="ksession-rules"/>
 </kbase>
</kmodule>

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  # Drools规则引擎 


相关文章: Java解压缩zip - 解压缩多个文件或文件夹实例  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站主机助手选型指南:2025年热门推荐与高效部署技巧  在线教育网站制作平台,山西立德教育官网?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何通过商城免费建站系统源码自定义网站主题?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  音乐网站服务器如何优化API响应速度?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  建站之星代理平台如何选择最佳方案?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  深圳网站制作平台,深圳市做网站好的公司有哪些?  七夕网站制作视频,七夕大促活动怎么报名?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  建站之星Pro快速搭建教程:模板选择与功能配置指南  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  红河网站制作公司,红河事业单位身份证如何上传?  如何在IIS中新建站点并配置端口与IP地址?  建站主机数据库如何配置才能提升网站性能?  名字制作网站免费,所有小说网站的名字?  建设网站制作价格,怎样建立自己的公司网站?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  ,巨量百应是干嘛的?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  郑州企业网站制作公司,郑州招聘网站有哪些?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Python lxml的etree和ElementTree有什么区别  魔毅自助建站系统:模板定制与SEO优化一键生成指南  个人网站制作流程图片大全,个人网站如何注销?  盐城做公司网站,江苏电子版退休证办理流程?  寿县云建站:智能SEO优化与多行业模板快速上线指南  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  大同网页,大同瑞慈医院官网?  实例解析Array和String方法  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何快速生成凡客建站的专业级图册?  如何通过网站建站时间优化SEO与用户体验?  建站之星免费模板:自助建站系统与智能响应式一键生成  建站主机是否属于云主机类型?  C++中引用和指针有什么区别?(代码说明)  如何用西部建站助手快速创建专业网站?  如何选择最佳自助建站系统?快速指南解析优劣  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  建站之星伪静态规则如何正确配置?  如何基于PHP生成高效IDC网络公司建站源码? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。