簡體   English   中英

使用springboot optaplanner-spring-boot-starter時如何使用多個ConstraintProvider

[英]How can we use multiple ConstraintProviders, when using the springboot optaplanner-spring-boot-starter

optaplanner-spring-boot-starter 會自動發現ContraintProvider,不需要solverConfig.xml,所以如果我們想針對不同的問題使用多個contraintProvider,比如問題A,需要使用problemAContraintProvider問題B,需要使用ProblemBContraintProvider ,是我可以使用任何 Qualifier 類型的注釋,並告訴 solverManger 使用特定的 ConstraintProvider 實現

public class ProblemAConstraintProvider implements ConstraintProvider {

    @Override
    public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
        return new Constraint[] { 
                typeMatch(constraintFactory),
                timeSlotMatch(constraintFactory),
                };
    }
}

public class ProblemBConstraintProvider implements ConstraintProvider {

    @Override
    public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
        return new Constraint[] { 
                checkId(constraintFactory),
    
                };
    }
}

您需要添加一個solverConfig.xml來覆蓋查找ConstraintProvider類的默認行為(然后禁食失敗,因為它找到了兩個)。

添加src/main/resources/solverConfig.xml (文件位置可以在 application.properties 中定制)並包含如下內容:

<solver>
  <scoreDirectoryFactory>
    <constraintProviderClass>...FirstConstraintProvider</>
  </scoreDirectoryFactory>
</solver>

但正如 Radovan 指出的那樣:在同一個 Spring Boot 應用程序中,我們還不支持多個 SolverManager/solverConfig 注入。 這是一個 API 差距。

最簡潔的答案是不; 類似於我們可以在 Springboot optaplanner 中使用多個 @PlanningSolution 類和多個 SolverManager 中的答案,每種類型的規划問題都需要一個新的求解器配置,該配置定義了constraintProviderClass

optaplanner-spring-boot-starter僅支持單個求解器配置,因此僅支持單一類型的規划問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM