zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《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