使用配置文件禁用Spring Cloud Server配置?

时间:2015-06-10 08:39:22

标签: spring-cloud

我想实现以下目标:

  • 在'dev'模式下,在当前的webapp中嵌入Spring Cloud Config
  • 在“dev”模式下时,连接到已运行的Spring Cloud Config服务器实例

因此,我当前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,它将再次运行。

希望现在更清楚了。 谢谢,

1 个答案:

答案 0 :(得分:7)

根据spring cloud配置服务器中的this class:配置服务器显式禁用配置客户端,除非您从系统属性(spring.cloud.config.enabled=true)或-D设置SpringApplicationBuilder。这是目前使这个工作的唯一方法。欢迎您提交解释您的用例的增强请求。