當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Springboot整合Drools规则引擎
生活随笔
收集整理的這篇文章主要介紹了
Springboot整合Drools规则引擎
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Drools
- 1,導入所需依賴
- 2,創建規則文件/resources/rules/helloworld.drl
- 3,編寫配置類DroolsConfig.java
- 4,創建RuleService類,測試使用
- 5,在Controller使用
1,導入所需依賴
<!--drools規則引擎--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-templates</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.10.0.Final</version></dependency><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><version>7.10.0.Final</version></dependency>2,創建規則文件/resources/rules/helloworld.drl
package helloworld rule "rule_helloworld"wheneval(true)thenSystem.out.println("規則:rule_helloworld觸發..."); end3,編寫配置類DroolsConfig.java
package com.myqxin.sx.common.config;import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieRepository; import org.kie.api.runtime.KieContainer; 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;/*** @author: myqxin* @Desc: 規則引擎配置類* @create: 2021-09-13 14:07**/ @Configuration public class DroolsConfig {// 指定規則文件存放目錄,這里是可以根據自己存放的drl文件進行修改的private static final String RULES_PATH = "rules/";private final KieServices kieServices = KieServices.Factory.get();@Bean@ConditionalOnMissingBeanpublic KieFileSystem kieFileSystem() throws IOException {KieFileSystem kieFileSystem = kieServices.newKieFileSystem();ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");String path = null;for (Resource file : files) {path = RULES_PATH + file.getFilename();kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));}return kieFileSystem;}@Bean@ConditionalOnMissingBeanpublic KieContainer kieContainer() throws IOException {KieRepository repository = kieServices.getRepository();repository.addKieModule(repository::getDefaultReleaseId);KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());kieBuilder.buildAll();return kieServices.newKieContainer(repository.getDefaultReleaseId());}@Bean@ConditionalOnMissingBeanpublic KieBase kieBase() throws IOException {return kieContainer().getKieBase();}@Bean@ConditionalOnMissingBeanpublic KModuleBeanFactoryPostProcessor kiePostProcessor() {return new KModuleBeanFactoryPostProcessor();} }4,創建RuleService類,測試使用
import org.kie.api.KieBase; import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;/*** @author: myqxin* @Desc:* @create: 2021-09-13 14:22**/ @Service public class RuleService {@Autowiredprivate KieBase kieBase; // 主要是引用這個調用newKieSession()拿到會話對象public void rule(){// 獲取會話對象,用于和規則引擎交互KieSession kieSession = kieBase.newKieSession();// 激活規則引擎,如果規則匹配成功則執行規則kieSession.fireAllRules();// 關閉會話kieSession.dispose();} }5,在Controller使用
@RestController @RequestMapping("/hello") public class HelloController {@Autowiredprivate RuleService ruleService;@RequestMapping("/rule")public String rule(){ruleService.rule();return "OK";} }控制臺打印效果如下:
總結
以上是生活随笔為你收集整理的Springboot整合Drools规则引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL查询结果条数编号示例 mys
- 下一篇: 利用CSS、JavaScript及Aja