RuleEngineConfig.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package org.jeecg.config;
  2. import org.kie.api.KieBase;
  3. import org.kie.api.KieServices;
  4. import org.kie.api.builder.KieBuilder;
  5. import org.kie.api.builder.KieFileSystem;
  6. import org.kie.api.builder.KieRepository;
  7. import org.kie.api.runtime.KieContainer;
  8. import org.kie.api.runtime.KieSession;
  9. import org.kie.internal.io.ResourceFactory;
  10. import org.kie.spring.KModuleBeanFactoryPostProcessor;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.context.annotation.Bean;
  14. import org.springframework.context.annotation.Configuration;
  15. import org.springframework.core.io.Resource;
  16. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  17. import org.springframework.core.io.support.ResourcePatternResolver;
  18. import java.io.IOException;
  19. @Configuration
  20. public class RuleEngineConfig {
  21. private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineConfig.class) ;
  22. private static final String RULES_PATH = "drools/";
  23. private final KieServices kieServices = KieServices.Factory.get();
  24. @Bean
  25. public KieFileSystem kieFileSystem() throws IOException {
  26. KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
  27. ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
  28. Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");
  29. String path = null;
  30. for (Resource file : files) {
  31. path = RULES_PATH + file.getFilename();
  32. LOGGER.info("path="+path);
  33. kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));
  34. }
  35. return kieFileSystem;
  36. }
  37. @Bean
  38. public KieContainer kieContainer() throws IOException {
  39. KieRepository kieRepository = kieServices.getRepository();
  40. kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
  41. KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
  42. kieBuilder.buildAll();
  43. return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
  44. }
  45. @Bean
  46. public KieBase kieBase() throws IOException {
  47. return kieContainer().getKieBase();
  48. }
  49. @Bean
  50. public KieSession kieSession() throws IOException {
  51. return kieContainer().newKieSession();
  52. }
  53. @Bean
  54. public KModuleBeanFactoryPostProcessor kiePostProcessor() {
  55. return new KModuleBeanFactoryPostProcessor();
  56. }
  57. }