代码之家  ›  专栏  ›  技术社区  ›  Rahul Rabhadiya

我们可以在spring boot中基于RESTAPI的路径参数实现@条件Bean吗?

  •  1
  • Rahul Rabhadiya  · 技术社区  · 7 年前

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   helospark    7 年前

    您不能使用 @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);