Spring Boot中如何处理服务的可选服务依赖?

雷根

我有一项名为InformationService. 它可选地取决于ReleaseService. 如果external.releaseservice.url设置了属性InformationService则应向它发出请求并使用聚合数据丰富它自己的响应。
但是,如果 url 未定义,则响应应简单地返回一个字符串,类似于not available相关字段。

实现这一目标的弹簧启动方式是什么?注入的Optional<ReleaseService>进入InformationService还有其他模式吗?

若昂·迪亚斯

您可以通过三种方式实现这一目标。

@Autowired(必需=假)

这是有效的,但它需要字段注入,这对于众所周知的单元测试来说不是很好。

@Autowired(required = false)
private ReleaseService releaseService;

Java 可选类型

正如你所说,它Optional也可以完成这项工作,它允许你坚持构造函数注入。这是我建议的方法。

Spring 的 ObjectProvider

还有一个ObjectProvider专为注射点设计的,您可以使用它来实现这一点,如下所示。

public InformationService(ObjectProvider<ReleaseService> releaseServiceProvider) {
    this.releaseService = releaseServiceProvider.getIfAvailable();
}

它更麻烦,因此我会避免它。如果没有可用的实例,则有一个优势可以让您指定默认实例,但我想这不是您所需要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果 Service 返回 DTO 不是实体,那么 Spring Boot 中如何处理其他服务中的 DTO?

如何处理Spring Boot中超时的异步请求?

如何正确处理来自服务的异常(spring boot rest)

如何使用密码授予在Spring Boot Oauth2资源服务器中处理CORS

Spring Boot 如何处理休眠会话?

Spring Boot 中的 SOAP 服务

Spring Boot服务中的线程

Spring Boot中的模拟服务

Spring Boot REST服务异常处理

如何处理服务器上的文件上传块(Plupload / Spring MVC)?

如何处理上传到用 Spring mvc 编写的服务器和服务器代码的视频块

如何在服务层中处理Spring JPA版本

如何处理导致在 Spring 中创建相互依赖的不同资源的 POST 请求?

如何处理spring集成中的错误

Spring服务的可选嵌套注射

如何在Spring Boot服务中解决太多@Value

Spring Boot:如何使用@Validated注释在JUnit中测试服务?

如何在 Spring Boot 中为任何服务创建接口

如何使用JUnit在Spring Boot中测试服务层的代码?

如何从Spring Boot应用程序中隧道PCF服务

在Spring Boot应用程序之间Jaeger中未显示服务依赖性

Kubernetes / Spring Boot中的服务发现

在Spring Boot中创建动态服务

AWS Beanstalk中的Spring Boot微服务

Spring Rest服务中的可选请求标头

这里 Spring boot 内部是如何处理 http 请求的?

如何处理Spring Boot的/ error重定向?

Spring Boot JPA 如何处理子表更新

Spring集成,如果服务器关闭连接,在接收到任意事件时如何处理并打开