目的
官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少。
本文介绍如何在Spring Boot项目上加上Drools规则引擎。
POM依赖
POM文件如下:
4.0.0 com.galaxyyao springbootdroolstest11.0.0 jar springbootdroolstest1 http://maven.apache.org UTF-8 1.8 org.springframework.boot spring-boot-starter-parent1.5.2.RELEASE org.springframework.boot spring-boot-starter-weborg.drools drools-core7.0.0.Final org.drools drools-compiler7.0.0.Final org.drools drools-decisiontables7.0.0.Final org.drools drools-templates7.0.0.Final org.kie kie-api7.0.0.Final maven-compiler-plugin org.springframework.boot spring-boot-maven-pluginorg.codehaus.mojo exec-maven-pluginjava 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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



