spring 云配置客户端未从配置服务器加载配置
spring cloud config client not loading configuration from config server
我正在关注这个 link:
http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_client_side_usage
我测试了一遍又一遍,没有看到Spring云客户端正在从云服务器加载配置,请帮忙看看错误在哪里:
POM:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
申请:
@Configuration
@EnableAutoConfiguration
@RestController
public class ConfigclientApplication {
@Value("${spring.cloud.config.uri}")
String url;
@Value("${production.host}")
String host;
@RequestMapping("/")
public String home() {
return "Host is => " + this.host ;
}
public static void main(String[] args) {
SpringApplication.run(ConfigclientApplication.class, args);
}
}
bootstrap.properties:
spring.cloud.config.uri=http://localhost:8888
- 配置服务器很好:
http://localhost:8888/spirent/default
{
"name": "spirent",
"profiles": [
"default"
],
"label": "master",
"propertySources": [
{
"name": "classpath:/spirent.yml",
"source": {
"production.host": "server1",
"production.port": 9999,
"production.value1": 12345,
"test.host": "server2.com",
"test.port": 4444,
"test.value": "hello123"
}
}
]
}
现在http://localhost:8080/根本无法启动
创建名称为 'configclientApplication' 的 bean 时出错
@Value 的自动注入似乎找不到 production.host 环境值。
从配置服务器加载后,如何读取客户端中的配置?
感谢您的帮助。
正如 Deinum 所暗示的,我会确保您已将客户端配置为 parent 作为 spring-cloud-starter-parent 并为其提供一个版本。 spring cloud 提供的 Maven 插件在您包含在您的依赖项中并且记住 cloud 是一个不同于 boot 的项目时将无法工作。将其更改为:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
其次,作为一门新学科(这里可能不是你的问题),我将在你的应用程序上使用新注释而不是 @Configuration 和 @EnableAutoConfiguration
@SpringBootApplication
第三,仔细检查你的配置服务器上是否有@EnableConfigServer
第四,确保您的 bootstrap.properties 在您的客户端上指定了您的 spring 应用程序名称:
spring.application.name=spirent
最后,如果您使用了 spring-cloud-config 示例项目,则必须在您的 URI 中设置一个默认用户和安全密码:
http://user:ddf4757e-0077-42e4-b2ad-2ae04340b08c@localhost:8888
否则,请尝试从位于此处的 spring-cloud-config 项目开始,以确保您的配置服务器设置正确:
https://github.com/spring-cloud/spring-cloud-config
对于使用默认 Maven Spring 与 Spring 相关的云依赖版本启动到 2.4.0 或 2.4.1(例如 [=16 的 2020.0.0-M5) =] Boot 2.4.0),除了遵循 RubesMN 的好建议之外,请注意在这种 Spring 云依赖中默认情况下不启用引导。根据 Spring Cloud 2020.0 Release Notes:
Bootstrap, provided by spring-cloud-commons, is no longer enabled by default. If your project requires it, it can be re-enabled by properties or by a new starter.
- To re-enable by properties set spring.cloud.bootstrap.enabled=true or spring.config.use-legacy-processing=true. These need to be set as an environment variable, java system property or a command line argument.
- The other option is to include the new spring-cloud-starter-bootstrap (in your POM file).
我使用了第二个选项,效果很好。
如果您使用的是 2020.0.0 版本的 spring 云,那么您需要在 Maven 依赖项中添加此依赖项以启用 bootstrap,这在 2020.0.0 中默认处于禁用状态。
对我有用。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
如果您使用的是 2020.0.0 版本的 spring 云,那么您需要在您的 maven 依赖项中添加此依赖项以启用 bootstrap,默认情况下禁用:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
我正在添加我的发现。对我来说,在度过健康的 2 小时后,我发现,
配置服务器应该有:[spring-cloud-config-server
]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
客户服务应该有:[spring-cloud-starter-config
]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
客户服务应声明:在application.properties
或application.yml
#This does not work
#spring.cloud.config.uri=http://localhost:8880/config-server
spring.application.name=name-by-which-properties/yml-file-is-created
spring.config.import=optional:configserver:http://host:port/application-context
management.endpoints.web.exposure.include=*
什么对我不起作用:
- 添加
spring-cloud-starter-bootstrap
- 添加
spring-cloud-starter-parent
希望这会帮助像我这样的人 Spring Boot (2.5.3)
和 Spring Cloud 2020.0.3
spring-boot
版本有问题。 Spring-cloud-starter-config
依赖项不适用于较旧的 spring-boot 版本。尝试将您的 spring-boot
版本更改为可能高于 2.4.0
.
的某个最新版本
以下 gradle
实施对我有用:
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
如果有人在为新的 spring 引导版本添加 spring-cloud-starter-bootstrap
后仍会在 PCF(使用市场配置服务器)上遇到此问题,请确保还添加了以下依赖项 -
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>spring-cloud-services-starter-config-client</artifactId>
</dependency>
我正在关注这个 link: http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_client_side_usage
我测试了一遍又一遍,没有看到Spring云客户端正在从云服务器加载配置,请帮忙看看错误在哪里:
POM:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
申请:
@Configuration
@EnableAutoConfiguration
@RestController
public class ConfigclientApplication {
@Value("${spring.cloud.config.uri}")
String url;
@Value("${production.host}")
String host;
@RequestMapping("/")
public String home() {
return "Host is => " + this.host ;
}
public static void main(String[] args) {
SpringApplication.run(ConfigclientApplication.class, args);
}
}
bootstrap.properties: spring.cloud.config.uri=http://localhost:8888
- 配置服务器很好: http://localhost:8888/spirent/default
{
"name": "spirent",
"profiles": [
"default"
],
"label": "master",
"propertySources": [
{
"name": "classpath:/spirent.yml",
"source": {
"production.host": "server1",
"production.port": 9999,
"production.value1": 12345,
"test.host": "server2.com",
"test.port": 4444,
"test.value": "hello123"
}
}
]
}
现在http://localhost:8080/根本无法启动
创建名称为 'configclientApplication' 的 bean 时出错 @Value 的自动注入似乎找不到 production.host 环境值。
从配置服务器加载后,如何读取客户端中的配置?
感谢您的帮助。
正如 Deinum 所暗示的,我会确保您已将客户端配置为 parent 作为 spring-cloud-starter-parent 并为其提供一个版本。 spring cloud 提供的 Maven 插件在您包含在您的依赖项中并且记住 cloud 是一个不同于 boot 的项目时将无法工作。将其更改为:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
其次,作为一门新学科(这里可能不是你的问题),我将在你的应用程序上使用新注释而不是 @Configuration 和 @EnableAutoConfiguration
@SpringBootApplication
第三,仔细检查你的配置服务器上是否有@EnableConfigServer
第四,确保您的 bootstrap.properties 在您的客户端上指定了您的 spring 应用程序名称:
spring.application.name=spirent
最后,如果您使用了 spring-cloud-config 示例项目,则必须在您的 URI 中设置一个默认用户和安全密码:
http://user:ddf4757e-0077-42e4-b2ad-2ae04340b08c@localhost:8888
否则,请尝试从位于此处的 spring-cloud-config 项目开始,以确保您的配置服务器设置正确:
https://github.com/spring-cloud/spring-cloud-config
对于使用默认 Maven Spring 与 Spring 相关的云依赖版本启动到 2.4.0 或 2.4.1(例如 [=16 的 2020.0.0-M5) =] Boot 2.4.0),除了遵循 RubesMN 的好建议之外,请注意在这种 Spring 云依赖中默认情况下不启用引导。根据 Spring Cloud 2020.0 Release Notes:
Bootstrap, provided by spring-cloud-commons, is no longer enabled by default. If your project requires it, it can be re-enabled by properties or by a new starter.
- To re-enable by properties set spring.cloud.bootstrap.enabled=true or spring.config.use-legacy-processing=true. These need to be set as an environment variable, java system property or a command line argument.
- The other option is to include the new spring-cloud-starter-bootstrap (in your POM file).
我使用了第二个选项,效果很好。
如果您使用的是 2020.0.0 版本的 spring 云,那么您需要在 Maven 依赖项中添加此依赖项以启用 bootstrap,这在 2020.0.0 中默认处于禁用状态。
对我有用。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
如果您使用的是 2020.0.0 版本的 spring 云,那么您需要在您的 maven 依赖项中添加此依赖项以启用 bootstrap,默认情况下禁用:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
我正在添加我的发现。对我来说,在度过健康的 2 小时后,我发现,
配置服务器应该有:[
spring-cloud-config-server
]<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies>
客户服务应该有:[
spring-cloud-starter-config
]<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>
客户服务应声明:在
application.properties
或application.yml
#This does not work #spring.cloud.config.uri=http://localhost:8880/config-server spring.application.name=name-by-which-properties/yml-file-is-created spring.config.import=optional:configserver:http://host:port/application-context management.endpoints.web.exposure.include=*
什么对我不起作用:
- 添加
spring-cloud-starter-bootstrap
- 添加
spring-cloud-starter-parent
希望这会帮助像我这样的人 Spring Boot (2.5.3)
和 Spring Cloud 2020.0.3
spring-boot
版本有问题。 Spring-cloud-starter-config
依赖项不适用于较旧的 spring-boot 版本。尝试将您的 spring-boot
版本更改为可能高于 2.4.0
.
以下 gradle
实施对我有用:
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
如果有人在为新的 spring 引导版本添加 spring-cloud-starter-bootstrap
后仍会在 PCF(使用市场配置服务器)上遇到此问题,请确保还添加了以下依赖项 -
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>spring-cloud-services-starter-config-client</artifactId>
</dependency>