我想实现以下目标:
因此,我当前webapp的类路径包含对配置服务器和客户端的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
在开发模式下,并且在bootstrap.yml中具有以下属性,它是正常的(嵌入式配置服务器已配置并启动)
spring:
application:
name: app1
profiles:
active: dev
cloud:
config:
uri: ${SPRING_CONFIG_URI:http://localhost:8888}
---
spring:
profiles: dev
cloud:
config:
server:
bootstrap: true
git:
uri: https://github.com/nocquidant/my-config-repo.git
basedir: target/config
当不处于'dev'模式时(例如spring.profiles.active = prod),当前的webapp无法启动:它无法自动装配我的属性(我想嵌入式服务器是在配置错误的情况下启动的)
如果我在POM中评论spring-cloud-config-server依赖关系,那么它可以工作。
我认为我可以使用以下内容实现我想要的,但是没有(实际上使用EnableConfigServer或者似乎没有改变任何东西):
@Configuration
@Profile("dev")
@EnableConfigServer
public static class EmbeddedConfigServer { }
我该怎么办(不使用maven个人资料)? 有没有一种简单的方法来禁用spring cloud配置服务器? 有没有更好的方法来实现我的目标?
任何帮助表示感谢。
P.S。使用的版本:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.3.BUILD-SNAPSHOT</version>
</parent>
//尼克
// ---编辑#1
请参阅github上的一个简单项目:https://github.com/nocquidant/exchange/tree/master/poc-spring-cloud/
它包含2个简单的模块:config-server和client-app。
首先,如果从客户端应用程序模块启动Client类,则一切正常(嵌入模式打开=&gt;请参阅bootstrap.yml中的dev配置文件)
然后,启动config-server(ConfigServer类)。然后在客户端应用程序中将'spring.profiles.active'更改为'prod'(或其他)并重新启动它:属性注入不再起作用(并且webapp拒绝启动)。
Caused by: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'server' on field 'port': rejected value [${taap.bak.config.port}];
因此无法连接到config-server模块。如果您从客户端应用程序模块评论maven依赖项:spring-cloud-config-server,它将再次运行。
希望现在更清楚了。 谢谢,
答案 0 :(得分:7)
根据spring cloud配置服务器中的this class:配置服务器显式禁用配置客户端,除非您从系统属性(spring.cloud.config.enabled=true
)或-D
设置SpringApplicationBuilder
。这是目前使这个工作的唯一方法。欢迎您提交解释您的用例的增强请求。