如何解决如何多次初始化具有不同依赖项的同一个组件? 内部 Rest 接口实施自动生成的 openapi 组件
我目前有一个 spring 服务,它通过自动生成的代码使用 REST 服务。 我放置了一个内部接口来抽象 REST 接口,因为它仍在开发中。
REST 服务实际上是在同一主机上的两个。 所以我生成了两次代码,其中包含两个组件,我可以将其注入到我的内部接口实现中。
在接口实现中,我确实通过@PostConstruct 调整了 REST 客户端组件的基本路径,因为 URL 依赖于部署环境。
到目前为止效果很好。尽管我认为最好不要在内部接口实现中而是在另一个地方调整基本路径。 感谢这里的任何提示。
问题
现在是棘手的部分。 我使用的 REST 服务在环境中使用不同的数据多次存在。 有时有两个,有时有三个等等。 我们网站的用户应该能够选择他想要使用的后端。 有关哪些服务后端可用的信息应该可以针对环境进行配置。
为了能够配置这些环境依赖,我想在属性中添加一个地图,如:
- 服务名称:网址
- 第二名:网址
等等。 此地图将包含始终存在的服务的默认值。 通过环境变量,它可以被覆盖以列出更多后端服务。
所以,现在我希望能够将网站请求路由到所选的后端服务。 我的想法是,我需要某种服务。 该服务拥有与不同后端实例的内部接口,并可以根据名称识别使用哪个。
现在的问题是,如何用 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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。