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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。