【问题标题】:Spring cloud config match profileSpring Cloud 配置匹配配置文件
【发布时间】:2021-04-18 13:45:12
【问题描述】:

我的 git 存储库中的应用程序文件的层次结构如下:

uri:https://bitbucket.org/repositorios-company/configuration-files

目录:

-authorization-service
----application.yml
----application-development.yml
----application-uat.yml
----application-production.yml
-cpo-executor
----application.yml
----application-development.yml
----application-uat.yml
----application-production.yml

在配置项目 yml 文件中:

server:
    port: 8888
spring:
    application:
        name: config-server
    cloud:
        config:
            server:
                git:
                    username: ###### 
                    ....
                    uri: https://bitbucket.org/repositorios-company/cup-configuration-files
                    searchPaths: '{application}'

问题:

  1. 当我尝试通过 url http://localhost:8888/authorization-service/development 访问开发文件时,spring 加载了两个文件,而不仅仅是我预期的一个:
2021-01-13 10:34:40.549  INFO 141562 --- [nio-8888-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/tmp/config-repo-3531515016986363333/authorization-service/application.yml
2021-01-13 10:34:48.950  INFO 141562 --- [nio-8888-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/tmp/config-repo-3531515016986363333/authorization-service/application-development.yml

  1. 当客户端应用程序,使用如下配置,尝试访问对应的配置文件时,spring只带上application.yml文件,不带上profile对应的文件:

客户端 yml:

spring.application.name=authorization-service
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888

应用启动后spring cloud config log显示默认application.yml:

2021-01-13 11:09:11.346  INFO 144899 --- [nio-8888-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/tmp/config-repo-1131390371944673193/authorization-service/application.yml

已编辑:我检查了该值是否在运行时发生了变化,以及它是否从 application-development.yml 中获取了值,但没有。

有人知道我怎样才能在这两种情况下只带一个配置文件吗?

【问题讨论】:

  • 配置服务器始终为application-{profile}.{yml|properties}application.{yml|properties} 提供服务。
  • 但是我怎样才能让我的客户端应用程序获取开发文件而不是默认文件?我做错了什么? @spencergibb
  • 我不知道。文件中的值是什么? /actuator/env 说什么?
  • 在客户端应用程序中显示 "activeProfiles": ["dev"] 但加载的文件是 application.yml 没有来自 application-development.yml @spencergibb 的值
  • dev 不匹配 development

标签: java spring git spring-cloud


【解决方案1】:

需要考虑的三件事:

  1. 即使我将配置文件用作“spring.profiles.active=development”,Spring 也会查找 application-dev.properties 而不是 application-development.properties 文件。我使用 Spring actuator 来查看 Spring 正在寻找的配置文件。

How to use Spring actuator

http://localhost:8080/actuator/env

{"activeProfiles":["dev"],....}
  1. 即使在 Spring Cloud Config 中加载了两个文件,应用程序客户端也只使用了相应的配置文件:
INFO 373818 ...NativeEnvironmentRepository  : Adding property source: file:/tmp/config-repo/authorization-service/application-dev.properties
INFO 373818 ...NativeEnvironmentRepository  : Adding property source: file:/tmp/config-repo/authorization-service/application.properties

但是如果你只需要一个应用来消费它profile对应的文件,当访问http://localhost:8888/authorization-service/dev时,只需从git仓库中删除默认的application.yml即可。

  1. 使用 Spring Cloud Config 时,请在应用程序客户端中使用 bootstrap.{yml|properties} 而不是 application.{yml|properties}。

What is the difference between putting a property on application.yml or bootstrap.yml in spring boot?

【讨论】:

    【解决方案2】:

    当你直接访问你的配置服务器时,它会显示这两个文件,这是正常的,基本配置文件和第二个覆盖基本配置文件的文件,这是正常行为。

    当您的客户端连接到您的配置服务器时,它只会获取一个文件,该文件将混合分配在您的配置服务器中的两个属性文件配置。

    以下文章描述了使用位于资源文件夹中的 bootstrap.yml 文件,该文件允许在从配置服务器获取数据时激活配置文件。

    What is the difference between putting a property on application.yml or bootstrap.yml in spring boot?

    【讨论】:

    • 我更改了两个文件的 server.port 值,并在我的应用程序启动并从 application.yml 而不是从 application-development.yml 获取默认值时检查了这些值。你试过这种配置吗?
    • 如前所述,我的项目已经在使用 bootstrap.property 加载,但它仍然没有从 application-development.yml 加载所需的值:(。
    【解决方案3】:

    你必须告诉spring你需要使用什么具体的文件yml

    例如:

    你必须在主类中添加:

    @PropertySource("classpath:foo.yml")
    

    这个注解说在运行主类时使用 foo.yml

    更多详情请访问: https://www.baeldung.com/properties-with-spring?

    我希望解决方案有所帮助。

    【讨论】:

    • 我已经在 yml 文件和 url 中告诉我想要哪个文件了。
    • 您必须为特定类添加注解,如果 API 的其余部分使用 x 和 y 类来编译您的请求,您必须为 x 和 y 类添加注解。
    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 2016-02-27
    • 2016-03-21
    • 2016-07-12
    • 2022-10-19
    • 2015-01-03
    • 2016-02-05
    • 2015-06-21
    相关资源
    最近更新 更多