我正在使用Spring Cloud Angel.SR4。我用于创建OAuth2RestTemplate
bean的Configuration类如下:
@Configuration
public class OAuthClientConfiguration {
@Autowired
private MyClientCredentialsResourceDetails resource;
public OAuthClientConfiguration() {
}
@Bean
@Qualifier("MyOAuthRestTemplate")
public OAuth2RestTemplate restTemplate() {
return new OAuth2RestTemplate(this.resource);
}
}
此配置完全正常,因为我在假设RestTemplate
中使用此RequestInterceptor
来向假冒请求注入访问令牌。问题是,当我使用OAuth2RestTemplate
注释自动装配的@LoadBalanced
时,依赖注入引擎会引发NoSuchBeanDefinitionException
异常。例如,以下内容会引发异常:
@LoadBalanced
@Autowired
@Qualifier("MyOAuthRestTemplate")
private OAuth2RestTemplate restTemplate;
当我删除@LoadBalanced
时,一切正常。 @LoadBalanced
有什么问题?我是否需要任何其他配置(我已经@EnableEurekaClient
)?
答案 0 :(得分:3)
我找到了解决方法。问题是我误解了@LoadBalanced
注释。这只是自动创建的负载平衡RestTemplate
bean的限定符,并且它不会在注释RestTemplate
周围创建代理以注入负载平衡功能。
看到这个https://github.com/spring-cloud/spring-cloud-commons/blob/v1.0.3.RELEASE/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java之后,我修改了我的OAuth2RestTemplate
bean定义,如下所示,它解决了这个问题。
@Bean
@Qualifier("MyOAuthRestTemplate")
public OAuth2RestTemplate restTemplate(RestTemplateCustomizer customizer) {
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(this.resource);
customizer.customize(restTemplate);
return restTemplate;
}
答案 1 :(得分:1)
我在Spring云中使用带有restTemplate的@LoadBalanced和幕后功能。
在它工作的bean定义中添加@LoadBalanced 像这样:
在我班上我有
@Autowired
@LoadBalanced
@Qualifier("bookRepositoryServiceRestTemplate") private RestTemplate bookRepositoryServiceRestTemplate;
在我的配置类中我有:
@Configuration
public class ServiceConfig {
@Bean
@LoadBalanced
public RestTemplate bookRepositoryServiceRestTemplate(SpringClientFactory clientFactory, LoadBalancerClient loadBalancer){
RibbonClientHttpRequestFactory ribbonClientHttpRequestFactory = new RibbonClientHttpRequestFactory(clientFactory,loadBalancer);
return new RestTemplate(ribbonClientHttpRequestFactory);
}
....
}
这对我有用
我希望这可以帮助