规则引擎 Drools(十二):集成 Spring Boot

依赖

编辑 pom.xml 文件添加依赖:

<dependency>  
    <groupId>org.kie</groupId>
    <artifactId>kie-spring</artifactId>
    <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>  

配置

src/main/resources/ 目录下创建 Spring 配置文件 drools-config.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:kie="http://drools.org/schema/kie-spring"
       xsi:schemaLocation="
       http://drools.org/schema/kie-spring http://drools.org/schema/kie-spring.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <kie:kmodule id="kmodule">
        <kie:kbase name="kbase" packages="rules">
            <kie:ksession name="ksession"/>
        </kie:kbase>
    </kie:kmodule>

    <bean id="kieAnnotationProcessor" class="org.kie.spring.annotations.KModuleAnnotationPostProcessor"/>

</beans>  

这里的配置和 kmodule.xml 配置

<?xml version="1.0" encoding="UTF-8"?>  
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="kbase" packages="rules">
        <ksession name="ksession"></ksession>
    </kbase>
</kmodule>  

是一样的。

注意:需要配置类 KModuleAnnotationPostProcessor 的 bean,才能使下面的 Drools 注解生效。

在 Spring Boot 的配置类,导入该配置文件:

@Configuration
@EnableAutoConfiguration
@ImportResource("classpath:/drools-config.xml")
public class ApplicationConfiguration {  
}

使用

以注入 KieSession 为例:

@Autowired
@KSession("ksession")
KieSession ksession;