如何解决使用springboot optaplanner-spring-boot-starter时如何使用多个ConstraintProviders
optaplanner-spring-boot-starter自动发现ContraintProvider,而没有SolverConfig.xml,因此,如果我们要针对多个问题使用多个constrantProvider,例如例如 问题A,需要使用problemAContraintProvider和问题B,需要使用ProblemBContraintProvider ,我可以使用任何限定符类型的注释,并告诉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的差距。
,简短的回答是“否”。与can we use multiple @PlanningSolution classes and multiple SolverManager in Springboot optaplanner中的答案类似,每种类型的计划问题都需要一个新的求解器配置,该配置定义了constraintProviderClass
。
optaplanner-spring-boot-starter
仅支持单个求解器配置,因此仅支持单一类型的计划问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。