drools 6学习4--动态加载规则
来源:互联网 发布:seo关键词优化外包 编辑:程序博客网 时间:2024/05/18 07:36
之前的2个drools例子的规则都是为规则文件中预先写好的,kmodule.xml指定文件路径,kieSeesion会将指定的文件夹下的所有规则文件都加载,这样会有一个麻烦,就是当规则改变了,那就得重写规则文件,然后重新打包部署项目,这会很麻烦,就有人想了,能否把规则保存在数据库中(这样可以通过页面进行更新数据库规则就OK了),然后项目加载规则的时候从数据库读取。drools也提供有这功能的,下面写了个小例子记录下
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fei.drools</groupId> <artifactId>drools-test2</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>6.4.0.Final</version></dependency><dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>6.4.0.Final</version></dependency><dependency> <groupId>org.drools</groupId> <artifactId>knowledge-api</artifactId> <version>6.4.0.Final</version></dependency> </dependencies> </project>
Message.java
package com.fei.drools;public class Message {public static final int HELLO = 0;public static final int GOODBYE = 1;@org.kie.api.definition.type.Label("消息")private String msg = "test";private int status;public Message() {super();}public String getMsg() {return this.msg;}public void setMsg(String message) {this.msg = message;}public int getStatus() {return this.status;}public void setStatus(int status) {this.status = status;}}
MainTest.java
package com.fei.drools;import java.io.UnsupportedEncodingException;import org.drools.KnowledgeBase;import org.drools.KnowledgeBaseFactory;import org.drools.builder.KnowledgeBuilder;import org.drools.builder.KnowledgeBuilderError;import org.drools.builder.KnowledgeBuilderErrors;import org.drools.builder.KnowledgeBuilderFactory;import org.drools.builder.ResourceType;import org.drools.io.ResourceFactory;import org.drools.runtime.StatefulKnowledgeSession;public class MainTest {public static void main(String[] args) {//rule,rule2可以放在数据库中,有个唯一code和他们对于,代码要执行规则的时候,根据code从数据库获取出来就OK了,这样自己开发的规则管理系统那边对数据库里的规则进行维护就行了String rule = "package com.fei.drools\r\n";rule += "import com.fei.drools.Message;\r\n";rule += "rule \"rule1\"\r\n";rule += "\twhen\r\n";rule += "Message( status == 1, myMessage : msg )";rule += "\tthen\r\n";rule += "\t\tSystem.out.println( 1+\":\"+myMessage );\r\n";rule += "end\r\n";String rule2 = "package com.fei.drools\r\n";rule += "import com.fei.drools.Message;\r\n";rule += "rule \"rule2\"\r\n";rule += "\twhen\r\n";rule += "Message( status == 2, myMessage : msg )";rule += "\tthen\r\n";rule += "\t\tSystem.out.println( 2+\":\"+myMessage );\r\n";rule += "end\r\n";StatefulKnowledgeSession kSession = null;try {KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();//装入规则,可以装入多个kb.add(ResourceFactory.newByteArrayResource(rule.getBytes("utf-8")), ResourceType.DRL);kb.add(ResourceFactory.newByteArrayResource(rule2.getBytes("utf-8")), ResourceType.DRL);KnowledgeBuilderErrors errors = kb.getErrors();for (KnowledgeBuilderError error : errors) {System.out.println(error);}KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();kBase.addKnowledgePackages(kb.getKnowledgePackages());kSession = kBase.newStatefulKnowledgeSession();Message message1 = new Message();message1.setStatus(1);message1.setMsg("hello world!");Message message2 = new Message();message2.setStatus(2);message2.setMsg("hi world!");kSession.insert(message1);kSession.insert(message2);kSession.fireAllRules();} catch (UnsupportedEncodingException e) {e.printStackTrace();} finally {if (kSession != null)kSession.dispose();}}}
执行结果
2 1
- drools 6学习4--动态加载规则
- Drools动态加载规则文件
- Drools动态加载规则文件
- 急!!!求教关于drools动态加载规则文件
- Drools规则引擎远程加载规则文件
- 规则引擎 学习之--Drools
- SpringBoot+ZooKeeper+ZKUI+Drools 实现应用配置中心及业务规则动态加载
- Drools学习笔记1-规则引擎介绍
- Drools学习笔记1-规则引擎介绍
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- IOS NSTimerr
- HTML5与JQuery混合应用:选座功能简单实现
- linux中把没有执行权限的文件变为可执行
- 二叉排序树
- 坑爹的青云志(第一集)
- drools 6学习4--动态加载规则
- Servlet-表单数据
- 东王河姜总来公司考察
- Android webView 软键盘覆盖输入框,webView页面底部显示不全
- select,epoll,poll比较(网络资源总结)
- leetcode 22. Generate Parentheses 递归
- adb出现cannot parse version string:kg01的解决方法
- Android Studio可能用到的快捷键
- 架构探险-从零开始写Javaweb框架读书笔记(2)