1. 程式人生 > >Drools Workbench 7.8.Final + Spring Boot實現動態規則

Drools Workbench 7.8.Final + Spring Boot實現動態規則

一、 Drools Workbench安裝

  1.     下載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,指定檔案編碼格式