如果你想要创建一个没有负载均衡的RestTemplate,新建一个RestTemplate bean并注入它;在使用负载均衡的RestTemplate 上,除了@Bean之前,需要加上限定修饰符@LoadBalanced;
@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate loadBalanced() {
return new RestTemplate();
}
@Primary
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
public class MyClass {
@Autowired
private RestTemplate restTemplate;
@Autowired
@LoadBalanced
private RestTemplate loadBalanced;
public String doOtherStuff() {
return loadBalanced.getForObject("http://stores/stores", String.class);
}
public String doStuff() {
return restTemplate.getForObject("https://example.com", String.class);
}
}
重要提示:
-
注意,在前面的示例中,用@Primary声明在RestTemplate 上去消除无限制条件修饰符@Autowired注入的歧义;白话【当引用的RestTemplate没有用@Autowired注入,会默认使用@Primary声明的RestTemplate】
-
如果发生以下错误
Can not set org.springframework.web.client.RestTemplate field com.my.app.Foo.restTemplate to com.sun.proxy.$Proxy89
尝试注入 RestOperations 或者设置 spring.aop.proxyTargetClass=true