java.lang.IllegalStateException: No instances available for localhost

场景

spring中使用restTemplate远程访问的时候报这个错:
java.lang.IllegalStateException: No instances available for localhost

解决方案

不只一种解决方案,看哪种更适合自己。

ip地址写为服务名

这个报错一般会出现在使用了负载均衡,如:

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

当restTemplate调用ulr的时候,不要直接写域名
http://127.0.0.1:8080/user
而是要写服务名
http://yonghu-server/user

重新设置restTemplate

那么如果我不想用负载均衡呢?
也是可以的。
配置代码如下:

 @Bean
 @LoadBalanced
 @Primary
 public RestTemplate restTemplate(){
     return new RestTemplate();
 }


 @Bean
 public RestTemplate restTemplateCustom(){
     return new RestTemplate();
 }

引入代码如下:

 @Autowired(required = false) // 这个可以解决idea报错
 @Qualifier("restTemplateCustom") // 表示根据名称来找bean
 private RestTemplate restTemplateCustom;

然后url使用ip,发现可以了。

你可能感兴趣的:(spring)