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)
使用者名稱: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,指定檔案編碼格式