Heim  >  Artikel  >  Java  >  So integrieren Sie die Drools-Regel-Engine in SpringBoot2

So integrieren Sie die Drools-Regel-Engine in SpringBoot2

PHPz
PHPznach vorne
2023-05-16 23:19:041256Durchsuche

1. Einführung in die Drools-Engine

1. Grundlegende Einführung

Drools ist eine Java-basierte Regel-Engine, Open Source, die komplexe und veränderbare Regeln aus harter Programmierung befreien und in Form von Regelskripten speichern kann In der Datei können die Regeländerungen sofort in der Online-Umgebung wirksam werden, ohne dass der Code geändert und die Maschine neu gestartet werden muss. Es zeichnet sich durch einfachen Zugriff auf Unternehmensrichtlinien, einfache Anpassung und einfache Verwaltung aus. Als Open-Source-Engine für Geschäftsregeln entspricht es den Industriestandards und ist schnell und effizient.

2. Regelsyntax

(1), Demonstrations-DRL-Dateiformat

package droolRule ;
import org.slf4j.Logger
import org.slf4j.LoggerFactory ;
dialect "java"
rule "paramcheck1"
  when 
  then
    final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;
    LOGGER.info("参数");
end

(2), Syntaxbeschreibung

· Dateiformat

kann .drl, XML-Dateien oder hartcodierte Java-Codeblöcke sein;

· Paket

In der Regeldatei muss das Paket definiert und in der ersten Zeile der Regeldatei platziert werden;

· Import

Die von der Regeldatei verwendete externe Variable kann eine Klasse sein oder eine barrierefreie statische Methode in einer Klasse;

· Regel

definiert eine Regel. paramcheck1-Regelname. Regeln bestehen normalerweise aus drei Teilen: Attribute, Bedingungen, Ergebnisse; Abhängigkeiten

<!--drools规则引擎-->
<dependency>
  <groupid>org.drools</groupid>
  <artifactid>drools-core</artifactid>
  <version>7.6.0.Final</version>
</dependency>
<dependency>
  <groupid>org.drools</groupid>
  <artifactid>drools-compiler</artifactid>
  <version>7.6.0.Final</version>
</dependency>
<dependency>
  <groupid>org.drools</groupid>
  <artifactid>drools-templates</artifactid>
  <version>7.6.0.Final</version>
</dependency>
<dependency>
  <groupid>org.kie</groupid>
  <artifactid>kie-api</artifactid>
  <version>7.6.0.Final</version>
</dependency>
<dependency>
  <groupid>org.kie</groupid>
  <artifactid>kie-spring</artifactid>
  <version>7.6.0.Final</version>
</dependency>

3. Konfigurationsdateien

@Configuration
public class RuleEngineConfig {
  private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineConfig.class) ;
  private static final String RULES_PATH = "droolRule/";
  private final KieServices kieServices = KieServices.Factory.get();
  @Bean
  public 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();
      LOGGER.info("path="+path);
      kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));
    }
    return kieFileSystem;
  }
  @Bean
  public KieContainer kieContainer() throws IOException {
    KieRepository kieRepository = kieServices.getRepository();
    kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
    kieBuilder.buildAll();
    return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
  }
  @Bean
  public KieBase kieBase() throws IOException {
    return kieContainer().getKieBase();
  }
  @Bean
  public KieSession kieSession() throws IOException {
    return kieContainer().newKieSession();
  }
  @Bean
  public KModuleBeanFactoryPostProcessor kiePostProcessor() {
    return new KModuleBeanFactoryPostProcessor();
  }
}

Auf diese Weise ist die Umgebungsintegration abgeschlossen.


3. Demonstrationsfall

1. Regeldatei So integrieren Sie die Drools-Regel-Engine in SpringBoot2

Regel 1

dialect "java"
rule "paramcheck1"
salience 99
when queryParam : QueryParam(paramId != null && paramSign.equals("+"))
  resultParam : RuleResult()
then
  final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;
  LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
  ruleEngineService.executeAddRule(queryParam);
  resultParam.setPostCodeResult(true);
end

Regelbeschreibung:

Je größer der Wert von A und die Bedeutung, desto höher die Priorität wird sein ausgeführt;

B Regelablauf: Wenn paramId nicht null ist und der Parameterbezeichner + ist, fügen Sie die Regel hinzu und -zeichen, entfernen Sie die Regel.

2. Regelausführungscode

dialect "java"
rule "paramcheck2"
salience 88
when queryParam : QueryParam(paramId != null && paramSign.equals("-"))
  resultParam : RuleResult()
then
  final Logger LOGGER = LoggerFactory.getLogger("param-check-two 规则引擎") ;
  LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
  ruleEngineService.executeRemoveRule(queryParam);
  resultParam.setPostCodeResult(true);
end
3. Regelaufrufschnittstelle


@Service
public class RuleEngineServiceImpl implements RuleEngineService {
  private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineServiceImpl.class) ;
  @Override
  public void executeAddRule(QueryParam param) {
    LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
    ParamInfo paramInfo = new ParamInfo() ;
    paramInfo.setId(param.getParamId());
    paramInfo.setParamSign(param.getParamSign());
    paramInfo.setCreateTime(new Date());
    paramInfo.setUpdateTime(new Date());
    ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;
    paramInfoService.insertParam(paramInfo);
  }
  @Override
  public void executeRemoveRule(QueryParam param) {
    LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
    ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;
    ParamInfo paramInfo = paramInfoService.selectById(param.getParamId());
    if (paramInfo != null){
      paramInfoService.removeById(param.getParamId()) ;
    }
  }
}

Das obige ist der detaillierte Inhalt vonSo integrieren Sie die Drools-Regel-Engine in SpringBoot2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen