podemos usar várias classes @PlanningSolution e vários SolverManager no Springboot optaplanner

Sep 03 2020

Para o aplicativo Springboot usando optaplanner-spring-boot-starter, a solução do problema de equilíbrio em nuvem funciona bem com uma solução de planejamento e solverManager semelhante a https://github.com/DuncanDoyle/optaplanner-sbs-cloud-balancing/tree/master/optaplanner-sbs , mas quando várias soluções de planejamento são definidas e chamadas usando um solverManager, ocorre um erro

Causado por: org.springframework.beans.factory.UnsatisfiedDependencyException: Erro ao criar bean com o nome 'solverFactory' definido no recurso de caminho de classe [org / optaplanner / spring / boot / autoconfigure / OptaPlannerAutoConfiguration.class]: Dependência não satisfeita expressa por meio do método 'solverFactory' parâmetro 0; a exceção aninhada é org.springframework.beans.factory.BeanCreationException: Erro ao criar bean com o nome 'solverConfig' definido no recurso de caminho de classe [org / optaplanner / spring / boot / autoconfigure / OptaPlannerAutoConfiguration.class]: A instanciação do bean por meio do método de fábrica falhou; a exceção aninhada é org.springframework.beans.BeanInstantiationException: Falha ao instanciar [org.optaplanner.core.config.solver.SolverConfig]: O método de fábrica 'solverConfig' lançou exceção; a exceção aninhada é java.lang.IllegalStateException: Várias classes ([classe com.test.model.PRCaseAssignment, classe com.test.model.CaseAssignment]) encontradas com uma anotação @PlanningSolution.

Como podemos definir várias classes @PlanningSolution e chamar usando o solverManager, há algum tipo de Qualificador que precisa ser anotado? Qualquer ajuda é apreciada. Obrigado.

Respostas

1 RadovanSynek Sep 04 2020 at 14:03

Posso perguntar qual é o caso de uso para ter várias classes de solução?

O optaplanner-spring-boot-startersuporta apenas uma única configuração de solucionador e, portanto, apenas uma única classe de solução. O mesmo acontece com a SolverManagerAPI: você pode enviar vários problemas de planejamento ao SolverManager, mas eles devem ser do mesmo tipo (classe de solução) e compartilhar a mesma configuração do solver. Para enviar um problema de planejamento de um tipo diferente, você deve criar uma nova instância do SolverManager. Consulte a documentação sobre como criar uma instância do SolverManagermanualmente.