使用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,所以如果我们想针对不同的问题使用多个 constrantProvider,例如问题A,需要使用problemAContraintProvider,问题B,需要使用ProblemBContraintProvider,是否有任何限定符类型的注释可以使用并告诉solverManger使用特定的ContraintProvider实现
optaplanner-spring-boot-starter discovers the ContraintProvider automatically, without a solverConfig.xml, so if we want to use multiple constrantProviders for different problems, like for example problem A, needs to use problemAContraintProvider and problem B, needs to use ProblemBContraintProvider, is there any Qualifier kind of annotation which i can use and tell the solverManger to use specific ConstraintProvider implementation
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
的默认行为> 类(然后禁食失败,因为它发现了两个).
You'll need to add a solverConfig.xml
to overrides the default behavior of looking for the ConstraintProvider
class (and then fail fasting because it finds two).
添加 src/main/resources/solverConfig.xml
(文件位置可以在 application.properties 中定制)并包含如下内容:
Add src/main/resources/solverConfig.xml
(file location can be tailored with in application.properties) and have it include something like:
<solver>
<scoreDirectoryFactory>
<constraintProviderClass>...FirstConstraintProvider</>
</scoreDirectoryFactory>
</solver>
但正如 Radovan 指出的那样:我们还不支持在同一个 Spring Boot 应用程序中进行多个 SolverManager/solverConfig 注入.这是 API 差距.
But as Radovan pointed out: we don't support multiple SolverManager/solverConfig injections yet in the same Spring Boot app. That is an API gap.
这篇关于使用springboot optaplanner-spring-boot-starter时如何使用多个ConstraintProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!