SpringBoot之整合Drools
发布时间:2020-12-15 07:14:20 所属栏目:Java 来源:网络整理
导读:一、Drools是什么 Drools是一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行所需的业务规则。 二、Drools有什么用 从我个人所
一、Drools是什么Drools是一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行所需的业务规则。 二、Drools有什么用从我个人所待过的公司,其中做智能酒店这个项目时就用到规则引擎Drools,将它用于处理优惠劵规则。 三、SpringBoot整合Drools初步实战1.导入Maven依赖<properties> <drools.version>7.14.0.Final</drools.version> </properties> <!-- drools --> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>${drools.version}</version> </dependency> 2.编写配置类package com.springcloud.blog.admin.config; 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.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; @Configuration public class KiaSessionConfig { private static final String RULES_PATH = "rules/"; @Bean 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(); final Resource[] resources = resourcePatternResolver.getResources(classpath*:" + RULES_PATH + **/*.*); resources; } @Bean KieContainer kieContainer() throws IOException { final KieRepository kieRepository = getKieServices().getRepository(); kieRepository.addKieModule( KieModule() { ReleaseId getReleaseId() { kieRepository.getDefaultReleaseId(); } }); KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem()); kieBuilder.buildAll(); getKieServices().newKieContainer(kieRepository.getDefaultReleaseId()); } KieServices getKieServices() { return KieServices.Factory.get(); } @Bean KieBase kieBase() throws IOException { kieContainer().getKieBase(); } @Bean KieSession kieSession() throws IOException { kieContainer().newKieSession(); } } 3.resources目录新建rules目录4.新建实体package com.springcloud.blog.admin.drools; People { int sex; String name; String drlType; getSex() { sex; } void setSex( sex) { this.sex = String getName() { name; } void setName(String name) { this.name = String getDrlType() { drlType; } setDrlType(String drlType) { this.drlType = drlType; } } 5.编写规则文件package com.springcloud.blog.admin.drools import com.springcloud.blog.admin.drools.People dialect java rule man when $p : People(sex == 1 && drlType == people) then System.out.println($p.getName() + 是男孩); end 6.单元测试(只要正常输出,表示整合是Ok的,接下来就可以任意应用了)package com.springcloud.blog.base.controller.test.task; import com.springcloud.blog.admin.BlogAdminApplication; import com.springcloud.blog.admin.drools.People; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.api.KieBase; import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.) @SpringBootTest(classes = BlogAdminApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) DroolsJunitTest { @Autowired KieSession session; @Test people() { People people = People(); people.setName(YC); people.setSex(1); people.setDrlType(); session.insert(people);//插入 session.fireAllRules();执行规则 } } 7.输出结果YC是男孩 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |