spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException
Posted
技术标签:
【中文标题】spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException【英文标题】: 【发布时间】:2016-07-27 07:39:40 【问题描述】:我使用的是 Spring Boot 1.3.3
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
编辑
我将 Brixton.RC1 用于我的 Spring Cloud 依赖项
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我的应用程序是使用这些注释设置的:
@EnableDiscoveryClient
@SpringBootApplication
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
我有一个带有服务的休息控制器:
@RestController
public class MyController
@Autowired
private MyService myService;
在我的服务中,我正在尝试使用自动装配的休息模板来调用另一个 eureka 注册服务。
@Service
public class MyServiceImpl
private final ParameterizedTypeReference<Answer> ANSWER = new ParameterizedTypeReference<Answer>() ;
@Autowired
private DiscoveryClient discoveryClient; //just here for testing
@Autowired
private RestTemplate restTemplate; //
public String someCoolMethod(String input)
log.info("Instance available? " + isInstanceAvailable());
final RequestEntity<String> requestEntity = RequestEntity.post(URI.create("http://myotherservice/othermethod")).accept(MediaType.APPLICATION_JSON).body(input);
final ResponseEntity<String> response = this.restTemplate.exchange(requestEntity, ANSWER);
log.info(response);
return response.getBody();
private Boolean isInstanceAvailable()
List<ServiceInstance> instances = discoveryClient.getInstances("myotherservice");
for(ServiceInstance si : instances)
log.info(si.getUri().toString());
return instances.size() > 0;
我完全糊涂了,因为我在另一个项目中工作。这也是输出:
INFO http://192.168.1.10:1234
INFO Instance available? true
ERROR I/O error on POST request for "http://myotherservice/othermethod": myotherservice; nested exception is java.net.UnknownHostException: myotherservice
所以我可以看到这两个服务都在 Eureka 中注册了。 MyService 能够:
在尤里卡注册 在 Eureka 中查询“myotherservice” 使用正确的主机和端口获得有效响应但是自动装配的 RestTemplate 正在抛出 UnknownHostException。
【问题讨论】:
你用的是什么版本的Spring Cloud?显示您的 Spring Cloud 依赖项。您的RestTemplate
未正确配置发现。
【参考方案1】:
answer 是您需要从 RC1 创建一个@Loadbalanced
RestTemplate
。
@Configuration
public class MyConfiguration
@LoadBalanced
@Bean
RestTemplate restTemplate()
return new RestTemplate();
【讨论】:
非常感谢!两次!以上是关于spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException的主要内容,如果未能解决你的问题,请参考以下文章
@EnableJpaRepositories 未检测到或在 spring-boot 应用程序中的任何位置都未检测到 Repository 的 @Autowired
spring-boot使用Autowried还是Resouce
使用 mockito 为 spring-boot 应用程序模拟 Qualified bean