使用一个新技术时。首先了解其作用,具体的这里不再过多的阐述。
参考:https://blog.csdn.net/u013115157/article/details/64922653
package com.hello
import com.hello.Hi
rule "hello"
when
eval(true)
then
System.out.println("Hello!!!");
end
从上面截图我们可以看出drl文件的规范
package 包
import 引入类
rule "" 规则名称
when 规则条件(eval true 代表条件成立)
then 规则动作部分(当when部分成立时执行)
end 结束
使用drl文件进行规则书写的缺点:仅限于开发/懂得编程人员开发与维护。所以我们使用drools提供的动态编译功能。
解决的问题:
1.不再进行书写规则文件。2.基于类对象与数据库存储的基础可脱离程序员使得业务人员最快的上手规则文件的配置。3.程序员在开发中只关心事实对象而无需关心业务规则。
核心代码:
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write("src/main/resources/com/drools/rules/" + 规则内容, rule.getBytes("UTF-8"));
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().getMessages(Message.Level.ERROR).size() > 0) {
throw new RuntimeException(kieBuilder.getResults().getMessages().toString());
}
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieBase kBase = kieContainer.getKieBase();
KieSession kieSession = kBase.newKieSession();
以上截图。
重点:
规则内容:也就是如图1所示代码(通过界面化的配置,程序后台的动态处理生成drl文件)
kieSession:这个对象相信对drools有一定基础的知道它可以干什么。
这里对kieSession对象重要常用方法进行介绍
1.insert——进行事实对象的注入(示例:kieSession.insert(Object))
2.setGlobal——进行全局对象的注入(示例:kieSession.setGlobal("key",value))
3.fireAllRules——发现并执行规则(示例:num = session.fireAllRules() num返回规则执行条数)
4.dispose——释放资源(示例:session.dispose())
梳理一下之后的Drools博客的路线
1.动态编译规则的数据库设计方案
2.拼接drl语句(头部分、基本条件部分、when部分、them部分、以及最深的一些函数等等)
3.缓存实现
4.Aop实现规则的执行日志
关注作者,持续更新哦!!!
这里只介绍这两种方式(作者使用第二种进行Drools的使用与开发)