如何在 Spring Boot 项目中获取 connectTimeout 值?

问题描述

我正在了解 Spring Boot 项目中的 RestTemplate,我想记录 connectTimeout 属性的值。

要设置此值,我可以执行以下操作:

HttpComponentsClientHttpRequestFactory rf =
        (HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory();
rf.setConnectTimeout(3000);

但我想像这样在 application.yml 中设置它:

  communication:
    http:
      client:
        connectTimeout: '3000'

然后,在配置类中我想记录这个值。如何获取配置类中connectTimeout的值?我不能做 rf.getConnectTimeout(); 因为这个方法不存在。 还有一个问题,Spring 如何设置我在 application.yml 中添加的 connectTimeout 值?任何反馈将不胜感激!

解决方法

AFAIK,没有简单的“设置属性 X”答案。

我所做的是创建自己的 @ConfigurationProperties 类,例如RestTemplateProperties ,注册等等。 RestTemplate bean 并在那里自定义我的 RestTemplate。

@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder,RestTemplateProperties restTemplateProperties) {
  return restTemplateBuilder
    .setConnectTimeout(restTemplateProperties.getConnectionTimeout())
    .setReadTimeout(restTemplateProperties.getReadTimeout())
    .build();
}

然后您可以在您的属性文件中设置值。

注意:这不是完全我的做法,但希望你能明白。