Drools Workbench 7.8.Final + Spring Boot实现动态规则
一、 Drools Workbench安装
- 下载Drools Workbench 下载地址
选择下载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" />
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"/>
6.启动tomcat(startup.bat)
访问:http://127.0.0.1:8080/kie-drools-wb/kie-drools-wb.jsp
用户名:admin 密码:admin
二、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使用
将需要匹配的实体类对象加入keiSession中:
遇到的问题:
1. 规则jar包加入后,启动Spring Boot时报错:
这个错误是因为本地资源库里面,该依赖的jar包未下载
将jar包加入本地资源库后,启动成功,测试匹配规则成功
2. 修改workbench中生成jar包保存地址:
添加环境变量:M2_HOME,MAVEN_HOME,并在Path中添加%MAVEN_HOME%/bin变量(为什么是两个,我也不知道,当时配了MAVEN_HOME未生效,加了M2_HOME后成功修改),另外修改maven安装目录下的settings.xml中的local标签值【重启电脑后生效】
修改结果:
3. 规则文件中 中文乱码问题:
在setenv.bat/setenv.sh中添加-Dfile.encoding=UTF-8,指定文件编码格式
上一篇: 史上最全抽象类和接口的区别
下一篇: 多线程-同步与死锁