使用springboot optaplanner-spring-boot-starter时如何使用多个ConstraintProvider [英] How can we use multiple ConstraintProviders, when using the springboot optaplanner-spring-boot-starter

查看:136
本文介绍了使用springboot optaplanner-spring-boot-starter时如何使用多个ConstraintProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆