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}'
问题:
- 当我尝试通过 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
- 当客户端应用程序使用以下配置尝试访问相应的配置文件时,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
已编辑:我检查了值是否在运行时更改,以及它是否从应用程序中获取了值-development.yml,但没有。
有人知道我怎样才能在两种情况下只带一个配置文件吗?
你必须告诉 spring 你需要使用的具体文件 yml :
例如:
在主要class你必须添加:
@PropertySource("classpath:foo.yml")
这个注释说在 运行 main class use foo.yml
更多详情请访问:
https://www.baeldung.com/properties-with-spring?
希望解决方案对您有所帮助。
当您直接访问您的配置服务器时,它会显示这两个文件,这是正常的,基本配置文件和覆盖基本配置文件的第二个文件,这是正常行为。
并且当您的客户端连接到您的配置服务器时,它只会获取一个文件,该文件将包含在您的配置服务器中分配的两个 属性 文件配置的混合。
以下 post 描述了位于资源文件夹中的 bootstrap.yml 文件的使用,该文件允许在从配置服务器获取数据时激活配置文件。
需要考虑三件事:
- 尽管我将配置文件用作“spring.profiles.active=development”Spring 查找应用程序-dev.properties 而不是应用程序-development.properties 文件。我使用 Spring 执行器来查看 Spring 正在寻找哪个配置文件。
http://localhost:8080/actuator/env
{"activeProfiles":["dev"],....}
- 即使在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时,只需从[=40中删除默认的application.yml =] 存储库。
- 当使用 Spring Cloud Config 在您的应用程序客户端中使用 bootstrap.{yml|properties} 而不是 application.{yml|properties}。
我的 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}'
问题:
- 当我尝试通过 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
- 当客户端应用程序使用以下配置尝试访问相应的配置文件时,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
已编辑:我检查了值是否在运行时更改,以及它是否从应用程序中获取了值-development.yml,但没有。
有人知道我怎样才能在两种情况下只带一个配置文件吗?
你必须告诉 spring 你需要使用的具体文件 yml :
例如:
在主要class你必须添加:
@PropertySource("classpath:foo.yml")
这个注释说在 运行 main class use foo.yml
更多详情请访问: https://www.baeldung.com/properties-with-spring?
希望解决方案对您有所帮助。
当您直接访问您的配置服务器时,它会显示这两个文件,这是正常的,基本配置文件和覆盖基本配置文件的第二个文件,这是正常行为。
并且当您的客户端连接到您的配置服务器时,它只会获取一个文件,该文件将包含在您的配置服务器中分配的两个 属性 文件配置的混合。
以下 post 描述了位于资源文件夹中的 bootstrap.yml 文件的使用,该文件允许在从配置服务器获取数据时激活配置文件。
需要考虑三件事:
- 尽管我将配置文件用作“spring.profiles.active=development”Spring 查找应用程序-dev.properties 而不是应用程序-development.properties 文件。我使用 Spring 执行器来查看 Spring 正在寻找哪个配置文件。
http://localhost:8080/actuator/env
{"activeProfiles":["dev"],....}
- 即使在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时,只需从[=40中删除默认的application.yml =] 存储库。
- 当使用 Spring Cloud Config 在您的应用程序客户端中使用 bootstrap.{yml|properties} 而不是 application.{yml|properties}。