英文:
Can OptaPlanner solver reload the ConstraintProvider in runtime?
问题
让我们假设我构建了一个ConstraintProvider,并将其标记为Spring bean。我需要从数据库加载一些参数,然后将其用于构建约束。
@Component
public class SomeConstraintProvider implements ConstraintProvider {
private final SomeRepository someRepository;
public SomeConstraintProvider(SomeRepository someRepository) {
this.someRepository = someRepository;
}
@Override
public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
return new Constraint[]{
someConstraint(someRepository.findSomething()),
};
}
}
根据我的理解,Optaplanner只在构建求解器时加载约束提供程序,所以即使我更改数据库中的参数值,它也不会影响当前的求解器。因此,我想知道是否有一种方法可以请求求解器重新加载约束提供程序,或者是否有任何方法可以实现动态从数据库加载参数、构建约束提供程序并更新求解器?
甚至进一步说,我是否可以从Spring上下文中删除当前的求解器,然后重新构建一个新的求解器?
英文:
Let's say I build a ConstraintProvider and also mark it as a Spring bean. I somehow need to load some parameters from the database and use it to build the constraints.
@Component
public class SomeConstraintProvider implements ConstraintProvider {
private final SomeRepository someRepository;
public SomeConstraintProvider(SomeRepository someRepository) {
this.someRepository = someRepository;
}
@Override
public Constraint[] defineConstraints(ConstraintFactory constraintFactory) {
return new Constraint[]{
someConstraint(someRepository.findSomething()),
};
}
}
From my understanding, Optaplanner only load the constraint provider when the solver was built, so even if I change the parameter value in the database, it will not effect the current solver anymore. So I was wondering if there is a way I can somehow ask the solver to reload the constraint provider or if there is any approach that can use to achieve loading parameters from database dynamically and build the constraint provider and update the solver?
or even further I can remove the current solver from spring context and rebuild a new one?
答案1
得分: 0
OptaPlanner和Timefold都不支持重新加载约束提供者。事实上,将任何状态放入约束提供者都是不鼓励的;这仅仅是因为我们还没有找到一种完全不可能的方法才有可能。
英文:
Neither OptaPlanner nor Timefold support reloading the constraint provider. In fact, putting any state in the constraint provider is discouraged; it is only possible because we haven't found a way to make it entirely impossible.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论