1

我正在使用Spring Cloud Angel.SR4。我創建一個OAuth2RestTemplate bean配置類如下:無法注入LoadBalanced帶註釋的OAuth2RestTemplate

@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)?

回答

1

我找到了解決方法。問題是我誤解了@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; 
} 
0

我用了@LoadBalanced和springTemplate中的restTemplate,後面帶着絲帶。

將在bean定義@LoadBalanced它的工作原理 這樣的:

在我的課

我有

@Autowired 
@LoadBalanced 
@Qualifier("bookRepositoryServiceRestTemplate") private RestTemplate bookRepositoryServiceRestTemplate; 

,並在我的配置類,我有:

這個作品對我來說

我希望這可以幫助

+0

您不應該需要'@Qualifier(「bookRepositoryServiceRestTemplate」)'。 – spencergibb

+0

是的,我知道這只是我的習慣 –