带有spring-cloud的Spring Boot:gradle构建失败

Posted

技术标签:

【中文标题】带有spring-cloud的Spring Boot:gradle构建失败【英文标题】:Spring Boot with spring-cloud: gradle build fails 【发布时间】:2017-11-25 21:01:25 【问题描述】:

./gradlew build 在运行:test 任务时失败并出现底部给出的错误。该代码仅检查上下文是否正确加载。

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration
public class RegistryApplicationTests 

    @Test
    public void contextLoads() 
    

bootstrap.yml 文件如下(非常标准),我不确定它为什么要尝试从 cloud-config 服务加载属性文件,我该如何解决??

spring:
 application:
   name: registry
 profiles:
   active: default
 cloud:
   config:
     uri: http://localhost:8888
     fail-fast: true

eureka:
  instance:
    prefer-ip-address: true
  client:
    registerWithEureka: false
    fetchRegistry: false
    server:
      waitTimeInMsWhenSyncEmpty: 0

堆栈跟踪

Caused by: java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing
    at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:130)
    at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:89)
    at 
    ....
    ....
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8888/registry/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:666)
    at 
    ....
    ....
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at 

更新 正如@dzatorsky 建议的那样,尝试添加@Profile("test")@ActiveProfiles("test")DID NOT WORK

尝试使用 @TestPropertySource(locations = "file:src/test/resources/application-test.yml") 手动添加测试的属性文件不起作用

最后使用 @TestPropertySource(properties = "spring.cloud.config.fail-fast=false") 覆盖,它工作,但它看起来像一个非常丑陋的工作

src/main/resources 中的推论是 bootstrap.yml 覆盖在其他任何地方指定的属性,尝试重命名 application-test.yml to bootstrap.yml in src/test/resources WORKED

这是完成这项工作的更清洁的方式吗?

【问题讨论】:

【参考方案1】:

“http://localhost:8888/registry/default”的 GET 请求出错:连接被拒绝:连接;嵌套异常是 java.net.ConnectException: Connection denied

您的 Spring Cloud Config 服务器似乎已关闭。

更新:如果您想在不运行配置服务器的情况下运行测试(在大多数情况下这是正确的做法),那么我建议您执行以下操作:

添加application-test.yml,内容如下:

cloud:
    config:
        fail-fast: false

用以下方式注释您的测试类:

@Profile("test")

在这种情况下,每当您运行测试时,它们都会使用 application.yml 中定义的默认参数以及您在 application.test.yml 中覆盖的参数。

【讨论】:

这是在执行 :test. fail-fast 属性更改为 true 以进行测试。 我已经根据上面的 cmets 更新了我的答案。

以上是关于带有spring-cloud的Spring Boot:gradle构建失败的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 指标与 spring-cloud 指标

Spring-Cloud、Hystrix 和 JPA - LazyInitializationException

带有 OpenTracing 的 Spring Cloud Sleuth

spring boo的简单搭建(eclipse+springboot + redis + mysql + thymeleaf)

网关 zuul 与 spring-cloud gateway的区别

带有 AWS 参数存储的 Spring Cloud