drools 基于数据库实现动态规则

drools 基于数据库实现动态规则,即为将规则文件字符串 存在数据库中,然后规则引擎执行的时候将规则从数据库中读取出来,写入到规则引擎KieFileSystem中,加载规则。从而实现,修改数据库后,即可及时执行规则。

创建springboot + mybatis 项目

https://abelyang.blog.csdn.net/article/details/89296273

导入drools 所需jar包

  
            org.kie
            kie-api
            6.5.0.Final
        
        
            org.drools
            drools-core
            6.5.0.Final
        
        
            org.drools
            drools-compiler
            6.5.0.Final
        
        
            org.drools
            drools-decisiontables
            6.5.0.Final
        
        
            org.drools
            drools-templates
            6.5.0.Final
        

在执行规则引擎的service 处的核心代码如下:
从数据加载规则字符串加载入规则引擎

 String rules = "";
        Rules ru = rulesDao.getById(id);
        if (ru != null && ru.getRules() != null) {
            rules = ru.getRules();
        }

        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kfs = kieServices.newKieFileSystem();
        kfs.write("src/main/resources/rules/rules.drl", rules.getBytes());
        KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
        Results results = kieBuilder.getResults();
        if (results.hasMessages(org.kie.api.builder.Message.Level.ERROR)) {
            System.out.println(results.getMessages());
            throw new IllegalStateException("### errors ###");
        }
        KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
        KieBase kieBase = kieContainer.getKieBase();
        KieSession ksession = kieBase.newKieSession();

        Message message = new Message();
        message.setStatus("0");
        ksession.insert(message);
        ksession.fireAllRules();

启动

drools 基于数据库实现动态规则_第1张图片

数据库修改规则
drools 基于数据库实现动态规则_第2张图片
重新请求
drools 基于数据库实现动态规则_第3张图片
源码:https://github.com/527515025/drools-springboot/tree/master/springboot-drools-dynamic-db

你可能感兴趣的:(2.Java,2.7,规则引擎Drools)