drools 基于jar包实现动态规则

Drools中提供了一个类KieScanner,可以支持从Maven存储库动态的加载并更新规则。官方给出的例子没有很好的证明这一能力。
项目演示共分三个包:

在这里插入图片描述

  • springboot-drools-dynamic-rules: springboot 和 drools 的结合,drools运行于此,并对外提供rest 接口服务
    在这里插入图片描述
  • springboot-drools-dynamic-rules-api: 一个简单maven项目,包含kjar和springboot-drools-dynamic-rules项目依赖的模型POJO
    在这里插入图片描述
  • springboot-drools-dynamic-rules-kjar:包含了kmodule.xml文件和drools规则.drl文件
    在这里插入图片描述
    规则引擎服务springboot-drools-dynamic-rules中并不包含规则,服务启动时,将从Maven存储库中拉取springboot-drools-dynamic-rules-kjar项目,并加载其中的规则。启动以后,规则引擎服务将不停的监视Maven存储库中的springboot-drools-dynamic-rules-kjar是否更新(轮训监控,监控时间为kScanner 中配置),如果更新则更新其中新的规则,规则引起服务本身不需重新启动。

springboot-drools-dynamic-rules-kjar项目

springboot-drools-dynamic-rules-kjar 项目是一个kjar项目(一下简称kjar项目),其中包含了kmodule.xml文件和Drools规则.drl文件。kjar项目是指引入了kie-maven-plugin插件,并指定打包为kjar,在打包的过程中,插件会校验以drl定义的规则是否可以正常编译。

kjar pom依赖

<dependencies>
        <dependency>
            <groupId>cn.abel</groupId>
            <artifactId>springboot-drools-dynamic-rules-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.kie</groupId>
                <artifactId>kie-maven-plugin</artifactId>
                <version>7.6.0.Final</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings
                    only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.kie</groupId>
                                        <artifactId>
                                            kie-maven-plugin
                                        </artifactId>
                                        <versionRange>
                                            [7.6.0.Final,)
                                        </versionRange>
                                        <goals>
                                            <goal>generateModel</goal>
                                            <goal>build</goal>
                                            <goal>injectreactive</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

springboot-drools-dynamic-rules

springboot-drools-dynamic-rules 是一个Spring Boot项目,可以动态加载规则的关键在于,在KieContainter容器上注册了一个KieScanner:

  private KieContainer kContainer;

    @PostConstruct
    public void setUp() {
        KieServices ks = KieServices.Factory.get();

        ReleaseId releaseId = ks.newReleaseId("cn.abel", "springboot-drools-dynamic-rules-kjar", "1.0-SNAPSHOT");

        kContainer = ks.newKieContainer(releaseId);
        KieScanner kScanner = ks.newKieScanner(kContainer);

        // Start the KieScanner polling the Maven repository every 10 seconds
        kScanner.start(10000L);
    }

启动

首先 install springboot-drools-dynamic-rules-api
其次 install springboot-drools-dynamic-rules-kjar
启动 springboot-drools-dynamic-rules

在这里插入图片描述
在这里插入图片描述
修改规则
在这里插入图片描述

重新 install springboot-drools-dynamic-rules-kjar

再次访问
在这里插入图片描述

完整代码:https://github.com/527515025/drools-springboot/tree/master/springboot-drools-dynamic-rules

发布了343 篇原创文章 · 获赞 649 · 访问量 231万+

猜你喜欢

转载自blog.csdn.net/u012373815/article/details/91549562