繁体   English   中英

我们可以在Spring Boot中基于​​rest api的path参数实现@Conditional Bean吗?

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

我有一种情况,在这种情况下,我应该进行spring boot webservice,它将从任何源中获取数据,而我的其余api是(/ fetchData / {src}),其中src是路径变量,并且它是源(数据库)的名称例如casandra,mongodb或任何其他nosql ..因此我希望初始化bean来与该数据库建立连接。 因此我们可以在这种情况下使用@Conditional bean。 但是问题在于,@Conditional bean根据属性文件值检查条件,这里我们必须根据rest api的路径参数应用条件。 那么我应该使用@Conditional还是任何其他设计模式(例如factory)?

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

您可以执行许多解决方案。 您可以使用简单的工厂或连锁店。

我用了几个例子:

创建一个界面

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM