Spring 引导 OAuth2RestTemplate 和 HTTP 客户端指标
Spring Boot OAuth2RestTemplate and HTTP Client Metrics
Actuator 管理 RestTemplate
的 instrumentation,我们只需要注入 RestTemplateBuilder
来创建 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();
}
}
如何使用 HTTP Client Mertics 支持创建 OAuth2RestTemplate
bean(内置 OAuth2)?
我刚刚找到了解决方案:
@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;
}
}
这是一个迟到的答案,但我一直在寻找类似的东西并找到了一种简单的方法。
Spring 引导配置的 RestTemplateBuilder 添加的不仅仅是 HTTP 客户端 Mertics(请参阅 RestTemplateAutoConfiguration)。如果您不想丢失这些,您仍然可以使用 auto-configured RestTemplateBuilder 来配置您的 OAuth2RestTemplate,如下所示:
@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);
}
}
Actuator 管理 RestTemplate
的 instrumentation,我们只需要注入 RestTemplateBuilder
来创建 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();
}
}
如何使用 HTTP Client Mertics 支持创建 OAuth2RestTemplate
bean(内置 OAuth2)?
我刚刚找到了解决方案:
@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;
}
}
这是一个迟到的答案,但我一直在寻找类似的东西并找到了一种简单的方法。
Spring 引导配置的 RestTemplateBuilder 添加的不仅仅是 HTTP 客户端 Mertics(请参阅 RestTemplateAutoConfiguration)。如果您不想丢失这些,您仍然可以使用 auto-configured RestTemplateBuilder 来配置您的 OAuth2RestTemplate,如下所示:
@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);
}
}