从云配置服务器配置 spring.* 启动属性

Posted

技术标签:

【中文标题】从云配置服务器配置 spring.* 启动属性【英文标题】:Configure spring.* boot properties from cloud config server 【发布时间】:2018-04-14 07:46:57 【问题描述】:

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

如何从 Cloud Config Server 实例配置基本的 Spring Boot 属性?显然,与配置服务器相关的 Spring boot 属性(即 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 中的设置完全被忽略了。

【问题讨论】:

您提到了bootstrap.yml 设置cloud.config.uri 属性。 bootstrap.yml中访问Cloud Config服务器所需的属性实际上是spring.application.namespring.cloud.config.urispring.cloud.config.label 是的,我很简短。我与云配置服务器的连接正常。我的整个应用程序目前可以正常工作,@Values 与配置服务器的设置相连接。 【参考方案1】:

所以对代码的调查显示我的问题是基于一些错误的假设。 Spring 看起来没有任何潜在的统一性。* Spring Boot 的属性。

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

这由 RabbitAutoConfiguration.java 引入。 RabbitProperties 当然没有任何东西可以引用 Spring Cloud Config Server 值。我仍然需要追踪 RabbitProperties 是在哪里制作的 bean。

目前,我破解了自己的 RabbitProperties bean 实现并将其标记为 @Primary。我只是使用标准的@Value 从云配置服务器中提取我想要的值。这会让我通过我正在做的 POC,但这是一个 hack,因为 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;
     
 

【讨论】:

以上是关于从云配置服务器配置 spring.* 启动属性的主要内容,如果未能解决你的问题,请参考以下文章

如何让是spring启动时加载一个类。这里类实现了读取xml配置数据到内存中(不是属性文件)

在不启动服务器的情况下使用 Spring 应用程序属性 [重复]

Spring Web项目spring配置文件随服务器启动时自动加载

停止 spring boot 应用程序启动,直到 spring cloud config server 启动

Spring Cloud 配置服务器未加载属性文件

Spring Cloud,配置服务器无法启动,如何为git配置uri