繁体   English   中英

Spring 云配置匹配配置文件

[英]Spring cloud config match profile

我的 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 文件,而不带上配置文件对应的文件:

客户端 yml:

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

应用程序启动后,spring 云配置日志显示默认的 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 中获取了值,但没有。

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

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

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

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

在 spring 引导中将属性放在 application.yml 或 bootstrap.yml 上有什么区别?

需要考虑的三件事:

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

Spring执行器如何使用

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

但是,如果您只需要一个应用程序来消费与其配置文件对应的文件,当访问 http://localhost:8888/authorization-service/dev 时,只需从 git 存储库中删除默认的 application.yml 即可。

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

在 spring 引导中将属性放在 application.yml 或 bootstrap.yml 上有什么区别?

you need to use:你必须告诉 spring 你需要使用什么特定的文件

例如:

在主 class 中,您必须添加:

@PropertySource("classpath:foo.yml")

这个注释说在运行主 class 使用 foo.yml

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

我希望解决方案有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM