首页 > 解决方案 > 从 Spring Condition 内部查询 DB

问题描述

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

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

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

谢谢你的帮助。

标签: springspring-bootspring-data-jpaconditional

解决方案


根据查询结果提供 ServiceBean 的配置可能会更好?

@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();
  }

}

推荐阅读