Spring 使用 spring-cloud 启动:gradle 构建失败
Spring Boot with spring-cloud: gradle build fails
./gradlew build
失败,底部给出错误,而 运行 :test
任务。该代码仅检查上下文是否已正确加载。
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration
public class RegistryApplicationTests {
@Test
public void contextLoads() {
}
}
下面给出了 bootstrap.yml 文件(非常标准),我不确定它为什么要尝试从云配置服务加载 属性 文件,我该如何解决它??
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")
, 无效 .
尝试使用 @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。
这是完成这项工作的更简洁的方法吗?
Error on GET request for "http://localhost:8888/registry/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused
您的 Spring Cloud Config 服务器似乎已关闭。
更新:如果你想运行你的测试没有运行宁配置服务器(这在大多数情况下是正确的做法)那么我建议您执行以下操作:
添加应用-test.yml,内容如下:
cloud:
config:
fail-fast: false
用以下方式注释您的测试 class:
@Profile("test")
在这种情况下,每当您 运行 您的测试时,它们都会使用 application.yml 中定义的默认参数以及您在应用程序中覆盖的参数。test.yml。
./gradlew build
失败,底部给出错误,而 运行 :test
任务。该代码仅检查上下文是否已正确加载。
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration
public class RegistryApplicationTests {
@Test
public void contextLoads() {
}
}
下面给出了 bootstrap.yml 文件(非常标准),我不确定它为什么要尝试从云配置服务加载 属性 文件,我该如何解决它??
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")
, 无效 .
尝试使用 @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。
这是完成这项工作的更简洁的方法吗?
Error on GET request for "http://localhost:8888/registry/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused
您的 Spring Cloud Config 服务器似乎已关闭。
更新:如果你想运行你的测试没有运行宁配置服务器(这在大多数情况下是正确的做法)那么我建议您执行以下操作:
添加应用-test.yml,内容如下:
cloud:
config:
fail-fast: false
用以下方式注释您的测试 class:
@Profile("test")
在这种情况下,每当您 运行 您的测试时,它们都会使用 application.yml 中定义的默认参数以及您在应用程序中覆盖的参数。test.yml。