Spring Boot+Drools规则引擎整合详解
目的
官方的Drools范例大都是基于纯Java项目或Maven项目,而基于SpringBoot项目的很少。
本文介绍如何在SpringBoot项目上加上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目录下添加一个简单的HelloWorld规则
packagecom.galaxyyao.springbootdroolstest1
importcom.galaxyyao.springbootdroolstest1.domain.Message
dialect"mvel"
rule"HelloWorld"
dialect"mvel"
when
m:Message(status.equals(Message.HELLO),message:message)
then
System.out.println(message);
modify(m){message="Goodbyecruelworld",status=Message.GOODBYE};
end
rule"GoodBye"
dialect"java"
when
Message(status==Message.GOODBYE,message:message)
then
System.out.println(message);
end
Domain层
Domain层定义一个Drools中需要使用到的Model:
packagecom.galaxyyao.springbootdroolstest1.domain;
publicclassMessage{
publicstaticfinalIntegerHELLO=0;
publicstaticfinalIntegerGOODBYE=1;
privateStringmessage;
privateIntegerstatus;
publicStringgetMessage(){
returnthis.message;
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
publicIntegergetStatus(){
returnthis.status;
}
publicvoidsetStatus(Integerstatus){
this.status=status;
}
}
Service层
Service层负责实际运行规则:
packagecom.galaxyyao.springbootdroolstest1.service;
importorg.kie.api.KieServices;
importorg.kie.api.runtime.KieContainer;
importorg.kie.api.runtime.KieSession;
importorg.springframework.stereotype.Service;
importcom.galaxyyao.springbootdroolstest1.domain.Message;
@Service
publicclassDroolsService{
publicStringfireRule(){
//loaduptheknowledgebase
KieServicesks=KieServices.Factory.get();
KieContainerkContainer=ks.getKieClasspathContainer();
KieSessionkSession=kContainer.newKieSession("ksession-rules");
//go!
Messagemessage=newMessage();
message.setMessage("HelloWorld");
message.setStatus(Message.HELLO);
kSession.insert(message);//插入
kSession.fireAllRules();//执行规则
kSession.dispose();
returnmessage.getMessage();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。