001package top.cenze.rule.config; 002 003import org.kie.api.KieBase; 004import org.kie.api.builder.KieFileSystem; 005import org.kie.api.runtime.KieContainer; 006import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 007import org.springframework.context.annotation.Bean; 008import org.springframework.context.annotation.Configuration; 009import top.cenze.rule.utils.KieUtil; 010 011import java.io.IOException; 012 013/** 014 * @desc: 规则配置 015 * @author: chengze 016 * @createByDate: 2023/8/3 13:37 017 */ 018//@Configuration 019public class DroolsConfig { 020 021 //指定规则文件存放的目录 022 public static final String RULES_PATH = "rules/"; 023 024 /** 025 * 内存文件系统 026 * @return 027 * @throws IOException 028 */ 029 @Bean 030 @ConditionalOnMissingBean 031 public KieFileSystem kieFileSystem() throws IOException { 032 return KieUtil.getKieFileSystem(); 033// // 创建文件系统 034// KieFileSystem kieFileSystem = KieUtil.getKieServices().newKieFileSystem(); 035// 036// // 创建资源解释器 037// ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); 038// 039// // 获取resource下RULES_PATH下所有资源文件 040// Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*"); 041// 042// String path = null; 043// for (Resource file : files) { 044// path = RULES_PATH + file.getFilename(); 045// 046// // 将资源文件载入至内存文件系统中 047// kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8")); 048// } 049// 050// return kieFileSystem; 051 } 052 053 /** 054 * 内存容器 055 * @return 056 * @throws IOException 057 */ 058 @Bean 059 @ConditionalOnMissingBean 060 public KieContainer kieContainer() throws IOException { 061 return KieUtil.getKieContainer(); 062// KieRepository kieRepository = KieUtil.getKieServices().getRepository(); 063// kieRepository.addKieModule(kieRepository::getDefaultReleaseId); 064// KieBuilder kieBuilder = KieUtil.getKieServices().newKieBuilder(kieFileSystem()); 065// kieBuilder.buildAll(); 066// KieContainer kieContainer = KieUtil.getKieServices().newKieContainer(kieRepository.getDefaultReleaseId()); 067// 068// KieUtil.setKieContainer(kieContainer); 069// return kieContainer; 070 } 071 072 /** 073 * 内存仓库 074 * @return 075 * @throws IOException 076 */ 077 @Bean 078 @ConditionalOnMissingBean 079 public KieBase kieBase() throws IOException { 080 return KieUtil.getKieBase(); 081// KieBase kieBase = kieContainer().getKieBase(); 082// 083// KieUtil.setKieBase(kieBase); 084// return kieBase; 085 } 086 087// @Bean 088// @ConditionalOnMissingBean 089// public KieSession kieSession() throws IOException { 090// KieSession kieSession = kieBase().newKieSession(); 091// 092// return kieSession; 093// } 094// 095// @Bean 096// @ConditionalOnMissingBean 097// public KModuleBeanFactoryPostProcessor kiePostProcessor() { 098// return new KModuleBeanFactoryPostProcessor(); 099// } 100}