使用方法
从字符串加载规则
@Test
public void test() {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
// 将决策表添加到KieFileSystem中
String drl =
"package rules\n" +
"import org.dtt.entity.Person\n" +
"rule "AgeCheck"\n" +
"when\n" + " $person : Person( age < 18 )\n" + " " +
"then\n" + " System.out.println( $person.getName() + " is under 18." );\n" +
"end\n";
kieFileSystem.write("src/main/resources/rules/rules.drl", drl);
// 将KieFileSystem装载到KieContainer中
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
// 创建KieSession
KieSession kieSession = kieContainer.newKieSession();
// 创建Person实例并将其加入KieSession中
Person person = new Person();
person.setAge(12);
person.setName("xshe");
kieSession.insert(person);
// 执行规则
kieSession.fireAllRules();
}
从指定文件加载规则
使用Drools从指定的规则文件执行主要有四步:
/**
* 从指定的规则文件执行
*/
@Test
public void readRulesFromFile() {
//①构建Drools内存环境
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession();
//②加载规则文件
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(
ResourceFactory.newClassPathResource("rules/loan-approval.drl"));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
//③构建Fact
Applicant applicant = new Applicant("Joe", 23, 900, 10000);
LoanApplication loanApplication = new LoanApplication(applicant,100000);
kieSession.insert(applicant);
kieSession.insert(loanApplication);
//④执行规则
kieSession.fireAllRules();
kieSession.dispose();
assertTrue(loanApplication.isApproved());
}
fact是一个业务对象,是规则文件中的事实,并且需要插入Drools内存环境中。在执行规则时,Drools会读取规则文件,并且匹配当前业务对象,如果找到匹配的规则,就会执行该规则。
从数据库中动态加载规则内容
步骤说明
- 在数据库中存储规则的内容,例如:在MySQL数据库中存储DRL文件的内容。
- 使用Java代码从数据库中读取规则的内容。您可以使用JDBC连接数据库并执行SQL查询以读取规则的内容。
- 将规则的内容转换为DRL文件。您可以将读取的字符串数据写入到DRL文件中。
- 使用Drools加载DRL文件。使用KieFileSystem加载DRL文件,然后将加载的规则添加到KieBuilder中。
- 使用KieServices创建一个KieContainer。由KieContainer创建KieSession,并动态加载新的规则。