欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Drools Workbench 7.8.Final + Spring Boot实现动态规则

程序员文章站 2022-05-22 11:13:59
...

 

一、 Drools Workbench安装

  1.     下载Drools Workbench 下载地址

     Drools Workbench 7.8.Final + Spring Boot实现动态规则

   选择下载Tomcat 8 WAR

     2. 将war包解压到Tomcat安装目录下的webapps文件夹下,并改名为kie-drools-wb

    3. 根据解压文件夹下的README.txt

        下载相关依赖包(到maven下载,搜索地址

         javax.security.jacc-api-1.6.jar

         kie-tomcat-integration-7.8.0.Final.jar

         slf4j-api-1.7.25.jar

       将依赖包放入tomcat\lib 目录下

    4. 进入tomcat\bin目录 创建 setenv.bat(一行写完,注意空格):

 set CATALINA_OPTS=-Xmx512M 
-Djava.security.auth.login.config=$CATALINA_HOME/webapps/kie-drools-wb/WEB-INF/classes/login.config 
-Dorg.jboss.logging.provider=jdk

    5.进入tomcat\conf目录配置 server.xml和tomcat-users.xml

     5.1 server.xml 在最后<Host></Host>中加入:

<Valve className="org.kie.integration.tomcat.JACCValve" />

   Drools Workbench 7.8.Final + Spring Boot实现动态规则 

    5.2 tomcat-users.xml 添加 roles and users: 

<role rolename="analyst"/>

<role rolename="admin"/>

<user username="admin" password="admin" roles="admin"/>

<user username="analyst" password="analyst" roles="analyst"/>

 Drools Workbench 7.8.Final + Spring Boot实现动态规则

 

     6.启动tomcat(startup.bat)

   访问:http://127.0.0.1:8080/kie-drools-wb/kie-drools-wb.jsp

   用户名:admin 密码:admin

Drools Workbench 7.8.Final + Spring Boot实现动态规则

二、Spring Boot中集入Drools

    1. pom依赖

<dependency>
	<groupId>org.kie</groupId>
	<artifactId>kie-spring</artifactId>
	<version>7.8.0.Final</version>
	<!--排除冲突版本依赖-->
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.drools</groupId>
	<artifactId>drools-compiler</artifactId>
	<version>7.8.0.Final</version>
</dependency>
<dependency>
	<groupId>org.kie</groupId>
	<artifactId>kie-api</artifactId>
	<version>7.8.0.Final</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-nop</artifactId>
	<version>1.7.6</version>
</dependency>
<dependency>
	<groupId>org.kie</groupId>
	<artifactId>kie-ci</artifactId>
	<version>7.8.0.Final</version>
</dependency>
<!--使用workbench生成的规则jar包,版本号只试了这种格式,无SNAPSHOT没有试过-->
<dependency>
	<groupId>com.myspace</groupId>
	<artifactId>Test</artifactId>
	<version>1.0.0-SNAPSHOT</version>
</dependency>

2. 加载Drools规则并设置定时动态扫描

    2.1 利用Java注解自动注入KieSession Bean

@Configuration
public class DroolsAutoConfig {

    private KieContainer kieContainer;

    public DroolsAutoConfig(){

        KieServices ks = KieServices.Factory.get();
        ReleaseId releaseId = ks.newReleaseId( "com.myspace", "Test", "1.0.0-SNAPSHOT" );
        kieContainer = ks.newKieContainer(releaseId);
        if(kieContainer == null){
            System.err.println("KieContainer 为空");
        }
        KieScanner kieScanner = ks.newKieScanner(kieContainer);
        kieScanner.start(10000L);
    }

    public KieServices getKieServices(){

        return KieServices.Factory.get();
    }

    @Bean
    @ConditionalOnMissingBean(KieSession.class)
    public KieSession kieSession(){

        return kieContainer.newKieSession();
    }
}

    2.2  KieSession使用

    Drools Workbench 7.8.Final + Spring Boot实现动态规则  

    将需要匹配的实体类对象加入keiSession中:

Drools Workbench 7.8.Final + Spring Boot实现动态规则

 

遇到的问题:

1.   规则jar包加入后,启动Spring Boot时报错:

Drools Workbench 7.8.Final + Spring Boot实现动态规则

这个错误是因为本地资源库里面,该依赖的jar包未下载

Drools Workbench 7.8.Final + Spring Boot实现动态规则

将jar包加入本地资源库后,启动成功,测试匹配规则成功

2. 修改workbench中生成jar包保存地址:

添加环境变量:M2_HOME,MAVEN_HOME,并在Path中添加%MAVEN_HOME%/bin变量(为什么是两个,我也不知道,当时配了MAVEN_HOME未生效,加了M2_HOME后成功修改),另外修改maven安装目录下的settings.xml中的local标签值【重启电脑后生效】

修改结果:

Drools Workbench 7.8.Final + Spring Boot实现动态规则

3. 规则文件中 中文乱码问题:

在setenv.bat/setenv.sh中添加-Dfile.encoding=UTF-8,指定文件编码格式

 

相关标签: drools