真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot2中怎么整合Drools規(guī)則引擎

本篇文章為大家展示了SpringBoot2中怎么整合Drools規(guī)則引擎,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到廣元網(wǎng)站設(shè)計(jì)與廣元網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋廣元地區(qū)。

一、Drools引擎簡(jiǎn)介

1、基礎(chǔ)簡(jiǎn)介

Drools是一個(gè)基于java的規(guī)則引擎,開源的,可以將復(fù)雜多變的規(guī)則從硬編碼中解放出來(lái),以規(guī)則腳本的形式存放在文件中,使得規(guī)則的變更不需要修正代碼重啟機(jī)器就可以立即在線上環(huán)境生效。具有易于訪問(wèn)企業(yè)策略、易于調(diào)整以及易于管理的特點(diǎn),作為開源業(yè)務(wù)規(guī)則引擎,符合業(yè)內(nèi)標(biāo)準(zhǔn),速度快、效率高。

2、規(guī)則語(yǔ)法

(1)、演示drl文件格式

package droolRule ;
import org.slf4j.Logger
import org.slf4j.LoggerFactory ;
dialect "java"
rule "paramcheck1"
  when 
  then
    final Logger LOGGER = LoggerFactory.getLogger("param-check-one 規(guī)則引擎") ;
    LOGGER.info("參數(shù)");
end

(2)、語(yǔ)法說(shuō)明

· 文件格式

可以 .drl、xml文件,也可以Java代碼塊硬編碼;

· package

規(guī)則文件中,package是必須定義的,必須放在規(guī)則文件第一行;

· import

規(guī)則文件使用到的外部變量,可以是一個(gè)類,也可以是類中的可訪問(wèn)的靜態(tài)方法;

· rule

定義一個(gè)規(guī)則。paramcheck1規(guī)則名。規(guī)則通常包含三個(gè)部分:屬性、條件、結(jié)果;

二、整合SpringBoot框架

1、項(xiàng)目結(jié)構(gòu)

SpringBoot2 整合 Drools規(guī)則引擎,實(shí)現(xiàn)高效的業(yè)務(wù)規(guī)則

SpringBoot2中怎么整合Drools規(guī)則引擎

2、核心依賴



  org.drools
  drools-core
  7.6.0.Final


  org.drools
  drools-compiler
  7.6.0.Final


  org.drools
  drools-templates
  7.6.0.Final


  org.kie
  kie-api
  7.6.0.Final


  org.kie
  kie-spring
  7.6.0.Final

3、配置文件

@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();
  }
}

這樣環(huán)境整合就完成了。

三、演示案例

1、規(guī)則文件

規(guī)則一

dialect "java"
rule "paramcheck1"
salience 99
when queryParam : QueryParam(paramId != null && paramSign.equals("+"))
  resultParam : RuleResult()
then
  final Logger LOGGER = LoggerFactory.getLogger("param-check-one 規(guī)則引擎") ;
  LOGGER.info("參數(shù):getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
  ruleEngineService.executeAddRule(queryParam);
  resultParam.setPostCodeResult(true);
end

規(guī)則二

dialect "java"
rule "paramcheck2"
salience 88
when queryParam : QueryParam(paramId != null && paramSign.equals("-"))
  resultParam : RuleResult()
then
  final Logger LOGGER = LoggerFactory.getLogger("param-check-two 規(guī)則引擎") ;
  LOGGER.info("參數(shù):getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
  ruleEngineService.executeRemoveRule(queryParam);
  resultParam.setPostCodeResult(true);
end

規(guī)則說(shuō)明:

A、salience 的值越大,越優(yōu)先執(zhí)行;

B、規(guī)則流程:如果paramId不為null,參數(shù)標(biāo)識(shí)是+號(hào),執(zhí)行添加規(guī)則,-號(hào),執(zhí)行移除規(guī)則操作。

2、規(guī)則執(zhí)行代碼

@Service
public class RuleEngineServiceImpl implements RuleEngineService {
  private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineServiceImpl.class) ;
  @Override
  public void executeAddRule(QueryParam param) {
    LOGGER.info("參數(shù)數(shù)據(jù):"+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("參數(shù)數(shù)據(jù):"+param.getParamId()+";"+param.getParamSign());
    ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;
    ParamInfo paramInfo = paramInfoService.selectById(param.getParamId());
    if (paramInfo != null){
      paramInfoService.removeById(param.getParamId()) ;
    }
  }
}

3、規(guī)則調(diào)用接口

@RestController
@RequestMapping("/rule")
public class RuleController {
  @Resource
  private KieSession kieSession;
  @Resource
  private RuleEngineService ruleEngineService ;
  @RequestMapping("/param")
  public void param (){
    QueryParam queryParam1 = new QueryParam() ;
    queryParam1.setParamId("1");
    queryParam1.setParamSign("+");
    QueryParam queryParam2 = new QueryParam() ;
    queryParam2.setParamId("2");
    queryParam2.setParamSign("-");
    // 入?yún)?
    kieSession.insert(queryParam1) ;
    kieSession.insert(queryParam2) ;
    kieSession.insert(this.ruleEngineService) ;
    // 返參
    RuleResult resultParam = new RuleResult() ;
    kieSession.insert(resultParam) ;
    kieSession.fireAllRules() ;
  }
}

上述內(nèi)容就是SpringBoot2中怎么整合Drools規(guī)則引擎,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:SpringBoot2中怎么整合Drools規(guī)則引擎
網(wǎng)站URL:http://weahome.cn/article/geodej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部