《Drools7.0.0.Final规则引擎教程》之Springboot集成详解编程语言
2023-06-13 09:20:44 时间
Springboot与Drools的集成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的初始化配置:
@Configuration public 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启动类
@SpringBootApplication public 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.adress import 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 ) @Controller public 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 即可。
15205.html
cjavaxml相关文章
- Spring学习笔记(十九)——springboot Web开发和模板引擎thymeleaf语法使用
- SpringBoot + mybatis 分页查询
- Springboot基于前端和后端验证码的实现和校验
- 3种方式轻松解决SpringBoot跨域问题,你都用过么?
- springboot集成mybatisplus分页_mybatis分页查询原理
- Prometheus+SpringBoot应用监控全过程详解
- springboot集成ribbon
- springboot集成feign
- 10年开发大牛教你如何学习获取调试SpringBoot源代码
- MyBatis-Plus 快速开始及详测 SpringBoot 集成Mybatis-Plus
- springboot整合dubbo+zookeeper
- SpringBoot 介绍「建议收藏」
- SpringBoot集成Knife4j接口管理工具
- SpringBoot集成QQ/网易/Gmail邮箱发送邮件
- SpringBoot 集成Redis 过程
- SpringBoot连接MySql数据库集成Mybatis详解编程语言
- SpringBoot集成Redis详解编程语言
- SpringBoot集成Swagger2详解编程语言
- SpringBoot集成Redis及使用总结详解编程语言