简介:springboot 2.0.4.RELEASE 集成 drools 7.11.0.Final

1.项目结构

2. pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>AllTest</artifactId>
<groupId>com.lcc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>drools_springboot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>properties</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>drools.version</span><span class="token punctuation">&gt;</span></span>7.11.0.Final<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>drools.version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>spring.boot.version</span><span class="token punctuation">&gt;</span></span>2.0.4.RELEASE<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>spring.boot.version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>properties</span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>${spring.boot.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-autoconfigure<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>${spring.boot.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.kie<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>kie-spring<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>${drools.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusions</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-tx<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-beans<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-context<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusions</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.drools<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>drools-compiler<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>${drools.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.12.6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span>

</project>

3.配置类

基于springboot的初始化配置:

package com.drools.spring;

import org.kie.api.KieBase;

import org.kie.api.KieServices;

import org.kie.api.builder.*;

import org.kie.api.runtime.KieContainer;

import org.kie.api.runtime.KieSession;

import org.kie.internal.io.ResourceFactory;

import org.kie.spring.KModuleBeanFactoryPostProcessor;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.Resource;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.core.io.support.ResourcePatternResolver; import java.io.IOException; /**
  • Created by lcc on 2018/9/27.

    */

    @Configuration

    public class DroolsAutoConfiguration { /** 特别要注意 rule的存放位置 */

    private static final String RULES_PATH = "rules/"; @Bean

    @ConditionalOnMissingBean(KieFileSystem.class)

    public KieFileSystem kieFileSystem() throws IOException {

    KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();

    for (Resource file : getRuleFiles()) {

    String path = RULES_PATH + file.getFilename();

    kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));

    }

    return kieFileSystem;

    } /**
    • 这里要引入 org.springframework.core.io.Resource 包
    • @return
    • @throws IOException

      /

      private Resource[] getRuleFiles() throws IOException {

      ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

      return resourcePatternResolver.getResources("classpath
      :" + RULES_PATH + "**/.");

      }
    @Bean

    @ConditionalOnMissingBean(KieContainer.class)

    public KieContainer kieContainer() throws IOException {

    final KieRepository kieRepository = getKieServices().getRepository();
     kieRepository<span class="token punctuation">.</span><span class="token function">addKieModule</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">KieModule</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">public</span> ReleaseId <span class="token function">getReleaseId</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">return</span> kieRepository<span class="token punctuation">.</span><span class="token function">getDefaultReleaseId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> KieBuilder kieBuilder <span class="token operator">=</span> <span class="token function">getKieServices</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">newKieBuilder</span><span class="token punctuation">(</span><span class="token function">kieFileSystem</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    kieBuilder<span class="token punctuation">.</span><span class="token function">buildAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">getKieServices</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">newKieContainer</span><span class="token punctuation">(</span>kieRepository<span class="token punctuation">.</span><span class="token function">getDefaultReleaseId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    }

    private KieServices getKieServices() {

    return KieServices.Factory.get();

    }

    @Bean

    @ConditionalOnMissingBean(KieBase.class)

    public KieBase kieBase() throws IOException {

    return kieContainer().getKieBase();

    }

    @Bean

    @ConditionalOnMissingBean(KieSession.class)

    public KieSession kieSession() throws IOException {

    return kieContainer().newKieSession();

    }

    @Bean

    @ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)

    public KModuleBeanFactoryPostProcessor kiePostProcessor() {

    return new KModuleBeanFactoryPostProcessor();

    }

    }

4.Springboot启动类

package com.drools.spring;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication; /**
  • Created by lcc on 2018/9/27.

    */

    @SpringBootApplication

    public class SpringBootDroolsApplication { public static void main(String[] args) {

    SpringApplication.run(SpringBootDroolsApplication.class, args);

    }

    }

5.实体类

package com.drools.spring.entity;

import lombok.Data;

/**
  • Created by lcc on 2018/9/27.

    */

    @Data

    public class Address { private String postcode; private String street; private String state;
}

6.规则返回结果类

package com.drools.spring.entity;

import lombok.Data;

/**
  • Created by lcc on 2018/9/27.

    */

    @Data

    public class AddressCheckResult { private boolean postCodeResult = false; // true:通过校验;false:未通过校验

    }

7.规则文件

注意存放的位置

package com.rules

import com.drools.spring.entity.Address;

import com.drools.spring.entity.AddressCheckResult; rule "Postcode should be filled with exactly 5 numbers"
when
address <span class="token operator">:</span> <span class="token function">Address</span><span class="token punctuation">(</span>postcode <span class="token operator">!=</span> null<span class="token punctuation">,</span> postcode matches <span class="token string">"([0-9]{5})"</span><span class="token punctuation">)</span>
checkResult <span class="token operator">:</span> <span class="token function">AddressCheckResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
then
checkResult<span class="token punctuation">.</span><span class="token function">setPostCodeResult</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"规则中打印日志:校验通过!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

end

8.规则文件kmodule

<?xml version="1.0" encoding="UTF-8" ?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="rules" packages="com.rules">
<ksession name="ksession-rule"/>
</kbase>
</kmodule>

9.测试Controller

package com.drools.spring.controller;

import com.drools.spring.entity.Address;

import com.drools.spring.entity.AddressCheckResult;

import org.kie.api.runtime.KieSession;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /**
  • Created by lcc on 2018/9/27.

    */

    @RequestMapping("/test")

    @Controller

    public class TestController { @Resource

    private KieSession kieSession; @ResponseBody

    @RequestMapping("/address")

    public void test(){

    Address address = new Address();

    address.setPostcode("99425");
     AddressCheckResult result <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AddressCheckResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    kieSession<span class="token punctuation">.</span><span class="token function">insert</span><span class="token punctuation">(</span>address<span class="token punctuation">)</span><span class="token punctuation">;</span>
    kieSession<span class="token punctuation">.</span><span class="token function">insert</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">int</span> ruleFiredCount <span class="token operator">=</span> kieSession<span class="token punctuation">.</span><span class="token function">fireAllRules</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"触发了"</span> <span class="token operator">+</span> ruleFiredCount <span class="token operator">+</span> <span class="token string">"条规则"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>result<span class="token punctuation">.</span><span class="token function">isPostCodeResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"规则校验通过"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    }

    }

启动Springboot项目之后,默认访问http://localhost:8080/test/address 即可。

运行结果

规则中打印日志:校验通过!
触发了1条规则
规则校验通过
        </div>

最新文章

  1. 图概PHP生命周期
  2. android释放内存的一个办法
  3. [Asp.net mvc] Asp.net mvc Kendo UI Grid的使用(四)
  4. 谱聚类 Spectral Clustering
  5. Maven中央仓库源地址改为阿里云(IDEA)
  6. [USACO5.4]奶牛的电信Telecowmunication
  7. 20175208 实验二 《Java面向对象程序设计》实验报告
  8. Redis学习笔记(2)-新建虚拟电脑,安装系统CentOSMini
  9. [C++]2-1 水仙花数
  10. idea/ecipse中使用maven集成springmvc相关jar包时候,出错:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
  11. 把旧系统迁移到.Net Core 2.0 日记 (17) --多租户和SoftDelete
  12. delphi 中的win32 以外到平台的字符串处理一定慢吗?(转载)
  13. Resultset转Bean工具类
  14. SQL到NoSQL概览性总结之一 数据库应用场景选型
  15. iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现
  16. 使用vue模拟购物车小球动画
  17. Ext学习系列(1)初识Ext
  18. eayui grid 每一页的行号都是从1开始
  19. Excel常见操作,重复数据,去除数据关联
  20. Array排序方法sort()中的大坑

热门文章

  1. 17年day5
  2. Odoo免费开源企业信息化平台助力企业成功
  3. (DP)51NOD 1049 最大子段和
  4. No task executor bean found for async processing: no bean of type TaskExecut
  5. Bryce1010 Acm模板
  6. Traceback (most recent call last): File &quot;setup.py&quot;, line 22, in &lt;module&gt; execfile(join(CURDIR, &#39;src&#39;, &#39;SSHLibrary&#39;, &#39;version.py&#39;)) NameError: name &#39;execfile&#39; is not defined
  7. java 选择排序与冒泡排序
  8. Java 8 (6) Stream 流 - 并行数据处理与性能
  9. Android 新闻app的顶部导航栏,怎么实现动态加载?
  10. jboss项目设置域名