java - 在使用springboot optaplanner-spring-boot-starter时,我们如何使用多个ConstraintProviders
问题描述
optaplanner-spring-boot-starter 自动发现ContraintProvider,没有solverConfig.xml,所以如果我们想为不同的问题使用多个constrantProviders,例如 问题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 差距。
推荐阅读
- laravel - Laravel 测试,通过 dataProvider 传递模型删除关系
- java - 如何使用先决条件创建 macOS 应用安装程序
- asp.net-core - 如何配置 .NET Core 日志记录 json 文件以忽略某些事件?
- javascript - 根据每行列的内容将一个大表拆分为多个表
- here-api - Android中导航管理器监听器和位置管理器监听器的问题[here-api]
- java - 创建 Windows 自动重启 + 每次重启时递增的计数器
- google-sheets - util_valuesheets(A1notation) 不会自动更新(Google 表格,杰出贡献者的公式添加)
- rust - 如何通过减少生锈来获得向量的乘积?
- c# - c# wpf 只有1个文件被选中
- python - .find_element_by_css_selector 没有 soenium/webdriver