Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们能否基于restapi';实现@conditionalbean;spring boot中的路径参数?_Java_Spring_Rest_Spring Boot_Spring Bean - Fatal编程技术网

Java 我们能否基于restapi';实现@conditionalbean;spring boot中的路径参数?

Java 我们能否基于restapi';实现@conditionalbean;spring boot中的路径参数?,java,spring,rest,spring-boot,spring-bean,Java,Spring,Rest,Spring Boot,Spring Bean,我有一个例子,在这个例子中,我应该创建spring boot webservice,它将从任何源获取数据&我的rest api是(/fetchData/{src}),其中src是路径变量&它是源(数据库)的名称,例如casandra、mongodb或任何其他nosql。。基于此,我想初始化bean以与该数据库建立连接。在这种情况下,我们可以使用@conditionalbean。但问题是,@conditionalbean检查基于属性文件值的条件&这里我们必须应用基于restapi的path参数的条

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

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

你可以做很多解决方案。你可以使用一个简单的工厂或连锁店

我用过的另一个例子是:

创建一个接口

public interface MyDataSource {
  SomeOutputData query(Data someDataIn);
  boolean supports(String pathParam);
}
创建所有实现(Cassandra、MongoDB等),并将这些实现的列表注入到您的服务中

 @Autowired
 private List<MyDataSource> dataSources;

谢谢你的建议。我也认为我们不能使用它,因为@conditional是在开始时计算的,path变量只在运行时才知道。再次感谢您的宝贵意见。
 dataSources.stream()
      .filter(dataSource -> dataSource.doesSupport(pathParam)
      .findFirst()
      .orElseThrow(() -> new IllegalArgumentException("No datasource"))
      .query(dataIn);