这里用的是7.62.0.Final版本
UTF-8 7.62.0.Final
dependencyManagemen添加
org.drools drools-bom ${drools.version} import pom
引入jar包依赖
org.kie
kie-api
org.drools
drools-core
org.drools
drools-compiler
org.drools
drools-mvel
2新建kmodule.xml配置文件
在src/main/resources下
新建/META-INF/kmodule.xml,
注意必须有META-INF目录,
否则Drools加载不到配置文件。
3新建Sample.drl规则文件
package com.sample.rules
import com.sample.DroolsUtils.Message;
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "GoodBye"
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
注意第一行的package一定要是com.sample.rules,
才能和kmodule.xml文件中的配置匹配上。
规则"Hello World"匹配Message类型的输入,
当Message的属性status为Message.HELLO时,
会执行打印Message的属性message等操作。
这里的语法基本上和Java相同,
还是比较容易理解的。
注意Message是Java类,
需要先导入才能使用:
import com.sample.DroolsUtils.Message;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
public class DroolsUtils {
public static final void main(String[] args) {
try {
// 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();
} catch (Throwable t) {
t.printStackTrace();
}
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
注意这里获取KieSession的参数ksession-rules,
要和上面kmodule.xml文件中的配置一致。



