从云配置服务器配置spring。* boot属性

时间:2017-11-01 21:48:22

标签: spring-boot spring-cloud-config

这似乎是一个非常基本的问题,但我无法在任何地方找到答案。

如何从Cloud Config Server实例配置基本Spring Boot属性?显然,与启动配置服务器相关的Spring启动属性(即cloud.config.uri,* .username,* .password)必须位于bootstrap.yml

此处提供的其他属性如何:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties

我希望spring.rabbitmq.addresses等来自我的配置服务器实例,而不是硬编码到引导程序或应用程序yml中。

如果我将该特定属性放入我的Git Repo中,Spring AMQP仍默认为localhost。在我看来,Git中的设置完全被忽略了。

1 个答案:

答案 0 :(得分:0)

因此对代码的调查显示我的问题是基于一些错误的假设。它看起来并不像春天的弹簧。*属性有任何潜在的统一性。

例如我所指的Spring Rabbit属性来自Rabbit特定对象:org.springframework.boot.autoconfigure.amqp.RabbitProperties

这是由RabbitAutoConfiguration.java引入的。 RabbitProperties当然没有任何能够引用Spring Cloud Config Server值的东西。我仍然需要追踪RabbitProperties作为bean的位置。

目前,我攻击了我自己的RabbitProperties bean实现并将其标记为@Primary。我只是使用标准@Value从Cloud Config Server中提取我所需的值。这将让我得到一个我正在做的POC,但是因为RabbitProperties有大量可能的配置,所以是一个黑客。我当然不想复制那里的所有内容。

 @EnableRabbit
 @Configuration
 public class RabbitConfigurer {

     @Value("${spring.rabbitmq.host:'localhost'}")
     private String host;

     @Value("${spring.rabbitmq.port:5672}")
     private int port;

     @Value("${spring.rabbitmq.username}")
     private String username;

     @Value("${spring.rabbitmq.password}")
     private String password;

     @Bean
     @Primary
     public RabbitProperties rabbitProperties() {

        RabbitProperties rabbitProperties = new RabbitProperties();
        rabbitProperties.setHost(host);
        rabbitProperties.setPort(port);
        rabbitProperties.setUsername(username);
        rabbitProperties.setPassword(password);

        return rabbitProperties;
     }
 }