我们可以在spring boot中基于​​rest api的路径参数实现@Conditional Bean吗?

时间:2017-11-24 11:27:02

标签: java spring rest spring-boot spring-bean

我有一个案例,我应该在其中制作spring boot webservice,它将从任何来源获取数据。我的休息api是(/ fetchData / {src})其中src是路径变量&它是源(数据库)的名称,例如casandra,mongodb或任何其他nosql ..所以基于我想要初始化bean以与该数据库建立连接。所以我们可以在这种情况下使用@Conditional bean。但问题是,@条件bean检查条件基于属性文件值&这里我们必须根据rest api的路径参数来应用条件。那么我应该使用@Conditional还是其他任何设计模式,比如工厂?

1 个答案:

答案 0 :(得分:2)

您不能使用@Conditional,因为它是在启动时评估的,而路径参数值仅在运行时已知。

您可以做很多解决方案。您可以使用简单的工厂或链。

我用了一些时间的另一个例子:

创建界面

public interface MyDataSource {
  SomeOutputData query(Data someDataIn);
  boolean supports(String pathParam);
}

创建所有实现(Cassandra,MongoDB等)并将这些列表注入您的服务

 @Autowired
 private List<MyDataSource> dataSources;

然后你可以选择合适的DataSource,如下所示:

 dataSources.stream()
      .filter(dataSource -> dataSource.doesSupport(pathParam)
      .findFirst()
      .orElseThrow(() -> new IllegalArgumentException("No datasource"))
      .query(dataIn);