如何在 Spring Boot 中的 OAuth2RestTemplate 中添加 REST API 请求超时?

问题描述 投票:0回答:1

在我的 Spring Boot 微服务中,我使用 OAuth2RestTemplate 进行 REST API 调用。现在,我们必须在其余 api 调用中添加请求超时,为此我尝试过 application.properties 文件中的 spring.mvc.async.request-timeout=20000 但不起作用。

@Configuration
public class ResourceConfig {

   @Bean
   @LoadBalanced
   @Qualifier("oauth2BalancedRestTemplate")
   public OAuth2RestTemplate oauth2BalancedRestTemplate(@Qualifier("oauth2RestTemplate") OAuth2RestTemplate bean) {
      OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(bean.getResource());
      restTemplate.setRequestFactory(bean.getRequestFactory());
      return restTemplate;
   }
   
   @Bean
   @LoadBalanced
   @Qualifier("oauth2JWTBalancedRestTemplate")
   public OAuth2RestTemplate oauth2JWTBalancedRestTemplate(@Qualifier("oauth2JWTRestTemplate") OAuth2RestTemplate bean) {
      OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(bean.getResource());
      restTemplate.setRequestFactory(bean.getRequestFactory());
      return restTemplate;
   } 
}

@Service
public class ApiCall {

   @Value("${url}")
   private String uri;
   
   @Value("${endpoint}")
   private String endpoint;
   
   @Autowired
   @Qualifier("oauth2JWTBalancedRestTemplate")
   private OAuth2RestTemplate restTemplate;

   public Response getTrdDetail(Request req) {
     HttpHeaders headers = new HttpHeaders();
     HttpEntity<Request> httpEntity = new HttpEntity<Request> (req, headers);
     return restTemplate.exchange(uri + endpoint, HttpMethod.POST, httpEntity, Response.class);
   
   }
}
java spring spring-boot resttemplate oauth2resttemplate
1个回答
0
投票

确保这些依赖关系

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>

配置 HttpComponentsClientHttpRequestFactory bean,然后将其注入到您的 OAuth2RestTemplate bean 中:

@Configuration
public class ResourceConfig {

    @Bean
    public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000); // 5 seconds
        factory.setReadTimeout(5000);    // 5 seconds
        return factory;
    }

    @Bean
    public OAuth2RestTemplate oAuth2RestTemplate() {
        ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails();
        resourceDetails.setAccessTokenUri("YOUR_ACCESS_TOKEN_URI");
        resourceDetails.setClientId("YOUR_CLIENT_ID");
        resourceDetails.setClientSecret("YOUR_CLIENT_SECRET");
        resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.header);

        OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resourceDetails);
        restTemplate.setRequestFactory(clientHttpRequestFactory());
        
        return restTemplate;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.