首页 > 开发 > Java > 正文

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

2024-07-13 10:12:24
字体:
来源:转载
供稿:网友

目的

官方的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.springbootdroolstest1import com.galaxyyao.springbootdroolstest1.domain.Messagedialect "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 };endrule "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;@Servicepublic 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(); }}

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表