从Spring Condition内部查询数据库

时间:2018-07-13 09:59:39

标签: spring spring-boot spring-data-jpa conditional

我有两个服务,它们都实现相同的接口。 我正在尝试使用Springs @Conditional批注来决定根据配置初始化哪个。由于事实,我必须处理旧版软件,因此配置存储在DB中并且必须保留在其中。所以我必须在我的情况下进行查询。我想为此使用SpringData,但是当我将存储库自动装配到我的org.springframework.context.annotation.Condition中时,它为null。我什至尝试使用ConditionContext之类的context.getBeanFactory().getBean(SystemSettingRepository.class)获取仓库,但这会产生异常。 您能想到从Condition内部查询数据库的任何方法吗? 这是我的代码:

public class UseCMISCondition implements Condition {
    @Autowired
    private SystemSettingRepository settingsRepo;

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return settingsRepo.useCMIS();
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

也许您会选择根据查询结果提供ServiceBean的Configuration吗?

@Configuration
public class ServiceProvider {
  @Autowired  private SystemSettingRepository settingsRepo;

  @Bean
  public MyInterface myIneterface(){
      boolean cmis = settingsRepo.useCMIS() ;
      if(cmis){
        return xMyService();
      } else {
        return yMyService();
      }
  }

  private XMyService xMyService(){
      return new XMyService();
  }

  private YMyService yMyService(){
      return new YMyService();
  }

}