我使用Spring Boot创建了一个服务(微服务设计的一部分)。我有下面的方法,
public static HttpClient getHttpClient() throws KeyManagementException, NoSuchAlgorithmException {
log.info("Creating Http Client...");
final SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
new SSLContextBuilder().build());
final PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(200);
connectionManager.setDefaultMaxPerRoute(20);
return HttpClients.custom()
.disableRedirectHandling()
.setSSLSocketFactory(sslConnectionSocketFactory)
.setConnectionManager(connectionManager)
.build();
}
我多次调用此方法,希望只维护一个实例并在创建后重用它。考虑到并发编程,我可以使用单例模式吗?根据下面的链接,我看到RestTemboard是非常好的方法,而不是Apache Http Client,
RestTemplate与ApacheHTTP客户端在spring项目中的生产代码
非常感谢您的建议。
首先,您应该使用spring内核的依赖注入,而不是直接使用方法来让实例在spring中工作。依赖注入(DI)容器将为您生成所需的实例并注入它。通过设置范围或使用特殊注释,可以配置DI容器生成实例的频率。关于Spring中具有自定义作用域的DI的代码示例,可以在下面找到一个很好的解释:https://www.baeldung.com/spring-bean-scopes
其次,我建议使用Spring RestTemplate,并通过RestTemplateBuilder或RestTemplateCustomizer根据您的需要进行配置https://www.baeldung.com/spring-rest-template-builder在RestTemplate中,spring已经提供了很多测试设置类,使JUnit测试变得简单,如果您已经在spring框架中工作,建议使用spring提供的选项。
我建议您使用Spring RestTemboard。在您的应用程序中仅实例化RestTemboard实例一次,然后使用依赖注入在多个服务/组件类中使用它。
创建RestTemplate实例的最佳方法是在spring配置类中将其注册为spring bean。这将在应用程序启动时创建RestTemplate的实例。下面的代码将创建RestTemplate的一个实例,它可以在多个类之间共享。
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
//if you want to set any properties in RestTemplate, set here
return restTemplate;
}
现在,要在任何服务类中使用RestTemplate,请使用依赖项注入:
@Service
class TestService {
@Autowired
private RestTemplate restTemplate
public void invokeRemoteService(){
//Here you are using restTemplate
String response =
restTemplate.postForObject(url, request, String.class);
}
}
null 在第一种方法中,我在mobile Applicaiton发出的每个新请求中创建新的http客户机对象。 这是我的代码 邮递请求代码
主要内容:Maven依赖关系,提交HTML表单参数示例许多应用程序需要模拟提交HTML表单的过程,以便登录到Web应用程序或提交输入数据。 HttpClient提供实体类来促进该过程。 以下教程显示了如何使用apache HttpClient 4.5发送HTML表单参数。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的内容如下 - 提
我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient
主要内容:Maven依赖关系,HttpRequestRetryHandler示例在以下示例中,我们演示了如何创建自定义以启用自定义异常恢复机制。 当使用这个接口时,需要实现方法。 这使我们能够定义一个自定义的重试计数机制和异常恢复机制。 看看下面的教程是如何实现的。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的内容如下 - HttpRequestRetryH
我与一位同事讨论了单例会话bean中的并发管理。根据我的理解,在阅读了Oracle文档之后,如果您取消了注释,那么它默认为容器管理的并发。在文档中,它说明了以下关于容器管理的单例会话bean的内容: javax.ejb.Lock注释和javax.ejb.LockType类型用于指定单例业务方法或@Timeout方法的访问级别。 和 如果singleton类上不存在@Lock注释,则默认的锁类型@L
我有一个类,它调用两个单例类FirstClass和SecondClass,如下所示。有没有一种方法可以在第二类中访问第一类中计算的数据。在这种情况下,我不想在第二类中进行外部服务调用,因为第一类已经调用了它。相反,只需在第二个数据函数中使用数据(存储在第一类函数中)。有什么方法可以做到。