我目前有一个spring服务通过自动生成的代码使用rest服务。我放置了一个内部接口,以便从rest接口进行抽象,因为它仍在开发中。
rest服务实际上是同一主机上的两个服务。所以我生成了两次代码,有两个组件可以注入到我的内部接口实现中。
在接口实现中,我确实通过@postconstruct调整rest客户机组件的基本路径,因为url依赖于部署环境。
到目前为止效果还不错。尽管我认为最好不要在内部接口实现中修改基本路径,而是在另一个地方修改。谢谢你的提示。
问题
现在是棘手的部分。我使用的rest服务在环境中多次存在,并且具有不同的数据。有时有两次,有时有三次,依此类推。我们网站的用户应该能够选择他想消费的后端。关于哪些服务后端可用的信息应该可以针对环境进行配置。
为了能够配置这些依赖于环境的属性,我考虑在属性中添加一个Map,例如:
服务名称:url
第二个名称:url
等等。此Map将包含始终存在的服务的默认值。通过环境变量可以覆盖它以列出更多的后端服务。
所以,现在我想能够路由到所选的后端服务的网站请求。我的想法是,我需要某种服务。该服务拥有与不同后端示例的内部接口,并且可以基于名称标识要使用的接口。
现在的问题是,如何用spring来构建它?更具体地说:
如何使用不同的依赖关系构建多个时间段的internalrestclient?
如何区分/识别和使用它们?
非常感谢您提前提出的建议。
代码示例
内部rest接口
public interface InternalRestClient {
String someAbstractMethodUsingBothServices(String someDate);
}
实施
@Service
public class InternalRestClientImpl implements InternalRestClient{
@Value("${url}")
private String url;
private FirstRestService firstService;
private SecondRestService secondService;
public InternalRestClientImpl(FirstRestService firstService, SecondRestService secondService) {
this.firstService = firstService;
this.secondService = secondService;
}
@PostConstruct
void correctPaths() {
firstService.setBasePath(url);
secondService.setBasePath(url);
}
@Override
public String someAbstractMethodUsingBothServices(String someDate) {
return null;
}
}
自动生成的openapi组件
@Component
public class FirstRestService {
private String basePath;
public void setBasePath(String basePath) {
this.basePath = basePath;
}
// some methods
}
@Component
public class SecondRestService {
private String basePath;
public void setBasePath(String basePath) {
this.basePath = basePath;
}
// some other methods
}
暂无答案!
目前还没有任何答案,快来回答吧!