0

Actuator manages the instrumentation of RestTemplate, we only have to inject RestTemplateBuilder to create RestTemplate bean:

@Configuration
public class HttpClientConfiguration {
    private final RestTemplateBuilder restTemplateBuilder;

    // let Actuator manages the instrumentation
    public HttpClientConfiguration(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplateBuilder = restTemplateBuilder;
    }

    @Bean // let Sleuth intercept requests
    public RestTemplate createRestTemplate() {
        return restTemplateBuilder.build();
    }
}

How to create an OAuth2RestTemplate bean (built-in OAuth2) with the HTTP Client Mertics support?

kinjelom
  • 6,105
  • 3
  • 35
  • 61

2 Answers2

2

I just found a solution:

@Configuration
@EnableOAuth2Client
public class OAuthClientConfig {
    private final MetricsRestTemplateCustomizer metricsRestTemplateCustomizer;

    public OAuthConfig(MetricsRestTemplateCustomizer metricsRestTemplateCustomizer) {
        this.metricsRestTemplateCustomizer=metricsRestTemplateCustomizer;
    }

    @Bean
    public OAuth2RestTemplate createOAuth2RestTemplate() {
        OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(
                getClientCredentialsResourceDetails(), 
                new DefaultOAuth2ClientContext());
        metricsRestTemplateCustomizer.customize(restTemplate);
        return restTemplate;
    }

    private ClientCredentialsResourceDetails getClientCredentialsResourceDetails() {
        ClientCredentialsResourceDetails rd = new ClientCredentialsResourceDetails();
        rd.setClientId("my-client-id");
        rd.setClientSecret("my-client-secret");
        rd.setAccessTokenUri("https://my-idp.server/oauth2/token");
        return rd;
    }
}
kinjelom
  • 6,105
  • 3
  • 35
  • 61
0

This is a late answer, but I was looking for something similar and found an alertnaive way.

The Spring Boot configured RestTemplateBuilder adds more than just the HTTP Client Mertics (see RestTemplateAutoConfiguration). If you don't want to lose those, you can still use the auto-configured RestTemplateBuilder to configure your OAuth2RestTemplate as follows:

@Configuration
public class OAuthClientConfig {

    @Bean
    public OAuth2RestTemplate createOAuth2RestTemplate(RestTemplateBuilder builder) {
        // Create and setup your OAuth2RestTemplate:
        OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(....);
        
        // let the auto-configure builder configure your template:
        return builder.configure(restTemplate);
    }
}
hnadra
  • 1