《Drools7.0.0.Final规则引擎教程》之Springboot集成
来源:互联网 发布:保卫萝卜3修改炮塔数据 编辑:程序博客网 时间:2024/05/22 03:35
本来准备按部就班的一章一章更新Drools相关教程,怎奈QQ群组(593177274)有朋友急需Springboot与Drools的集成demo,于是抽出时间写了一个,现在拿出来分享一下。加入群组可免费下载demo,也可以在CSDN下载频道下载:Springboot&Drools demo
pom文件
引入了springboot和drools的依赖,同时引入了kie-spring的集成依赖。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-spring</artifactId> <version>${drools.version}</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>${drools.version}</version> </dependency> </dependencies>
配置类
基于springboot的初始化配置:
@Configurationpublic class DroolsAutoConfiguration { private static final String RULES_PATH = "rules/"; @Bean @ConditionalOnMissingBean(KieFileSystem.class) public KieFileSystem kieFileSystem() throws IOException { KieFileSystem kieFileSystem = getKieServices().newKieFileSystem(); for (Resource file : getRuleFiles()) { kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8")); } return kieFileSystem; } 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.addKieModule(new KieModule() { public ReleaseId getReleaseId() { return kieRepository.getDefaultReleaseId(); } }); KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem()); kieBuilder.buildAll(); return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId()); } 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(); }}
Springboot启动类
@SpringBootApplicationpublic class SpringBootDroolsApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDroolsApplication.class, args); }}
实体类
public class Address { private String postcode; private String street; private String state; // 省略getter/setter}
规则返回结果类
public class AddressCheckResult { private boolean postCodeResult = false; // true:通过校验;false:未通过校验 // 省略getter/setter}
规则文件
package plausibcheck.adressimport com.secbro.model.Address;import com.secbro.model.fact.AddressCheckResult;rule "Postcode should be filled with exactly 5 numbers" when address : Address(postcode != null, postcode matches "([0-9]{5})") checkResult : AddressCheckResult(); then checkResult.setPostCodeResult(true); System.out.println("规则中打印日志:校验通过!");end
测试Controller
@RequestMapping("/test")@Controllerpublic class TestController { @Resource private KieSession kieSession; @ResponseBody @RequestMapping("/address") public void test(){ Address address = new Address(); address.setPostcode("99425"); AddressCheckResult result = new AddressCheckResult(); kieSession.insert(address); kieSession.insert(result); int ruleFiredCount = kieSession.fireAllRules(); System.out.println("触发了" + ruleFiredCount + "条规则"); if(result.isPostCodeResult()){ System.out.println("规则校验通过"); } }}
启动Springboot项目之后,默认访问http://localhost:8080/test/address 即可。
后语
你的支持是我努力的最大动力!社区的建立离不开你的支持。此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。如有疑问可以留言也可以发送本人邮箱secbro2@gmail.com。击此处关注Drools博客专栏的持续更新《Drools博客专栏》
阅读全文
2 0
- 《Drools7.0.0.Final规则引擎教程》之Springboot集成
- 《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载
- 《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
- 《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
- 《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
- 《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用
- 《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
- 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
- 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历
- Samsung TextView 坑之旅
- 7.18
- fork()与写时拷贝~
- Shell系列—Shell echo命令
- YARN的架构
- 《Drools7.0.0.Final规则引擎教程》之Springboot集成
- 人脸识别入门学习《一》
- Hash问题1
- JPA 实体管理器工厂(EntityManagerFactory)
- 35 个 Java 代码性能优化总结
- 栈、队列面试题总结
- 程序员励志语录
- pgsql使用的部分触发器
- Android中自定义switch控件样式