![](/img/trans.png)
[英]optaplanner-spring-boot-starter vs kie-server-spring-boot-starter
[英]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.