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

Can we implement @Conditional Bean based on rest api's path param in spring boot?

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

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

您可以采取多种解决方案。您可以使用简单的工厂或链。

我用过几次的另一个例子:

创建接口

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

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

 @Autowired
 private List<MyDataSource> dataSources;

然后你可以选择合适的数据源,像这样:

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