[英]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.