java—在使用springboot optaplanner spring boot starter时,如何使用多个constraintproviders

ffx8fchx  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(396)

optaplanner spring boot starter会自动发现contraintprovider,而不需要solverconfig.xml,因此如果我们要为不同的问题使用多个ConstantProvider,例如问题a,需要使用ProblemAcontrantProvider,问题b,需要使用ProblemBContrantProvider,是否有任何类型的注解我可以使用并告诉SolverManager使用特定的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),

                };
    }
}
gv8xihay

gv8xihay1#

简单的回答是否定的;与springboot optaplanner中的答案类似,我们是否可以使用多个@planningsolution类和多个solvermanager,每种类型的规划问题都需要一个新的解算器配置来定义 constraintProviderClass .
这个 optaplanner-spring-boot-starter 仅支持单个解算器配置,因此仅支持单一类型的规划问题。

d6kp6zgx

d6kp6zgx2#

您需要添加一个 solverConfig.xml 重写查找 ConstraintProvider 上课(然后禁食失败,因为它发现了两个)。
添加 src/main/resources/solverConfig.xml (可以使用in application.properties定制文件位置)并使其包含以下内容:

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

但正如radovan所指出的:我们还不支持在同一个spring boot应用程序中进行多个solvermanager/solverconfig注入。这是一个api缺口。

相关问题