我目前有许多可部署的应用程序,它们以分布式方式工作以解决业务问题。我们目前正在使用许多属性配置文件来提供基于系统环境变量的每个环境的更改配置。所有这些可部署的应用程序共享数据库和消息传递的通用配置。目前,这是通过从类路径中获取属性文件并让两个已部署的应用程序为每个包含属性文件的连接(db、jms)共享一个公共 jar 来实现的。
如果可能的话,我希望开始使用 Spring Config Server 来外部化此配置。我有一个关于如何共享这个通用配置的问题。
目前看起来像这样:-
Web1
- 数据库
- jms
消息1
- 数据库
- jms
在这种情况下,两个已部署的应用程序共享相同的连接,并且这些连接会根据环境(lab、prf、prd 等)而变化。我如何使用 Spring 配置服务器实现相同的功能,我为每个可部署的应用程序配置了应用程序?
Application.yml
Web1.yml
Web1-dev.yml
Messaging1.yml
Messaging1-dev.yml
如果环境的连接属性发生变化,我需要对每个可部署的应用程序配置进行更改,而不是只更改一次。
目前有没有办法实现这个目标?我只是错过了一个简单的点吗?
我在这里找到了有效的解决方案https://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html,段落“2.1.5 与所有应用程序共享配置”。它说:
使用基于文件(即 git、svn 和本机)的存储库、资源 应用程序中的文件名*在所有客户端之间共享 应用程序(所以 application.properties,application.yml, 应用程序-*.properties 等)。您可以将资源与这些文件一起使用 名称来配置全局默认值并让它们被覆盖 必要时特定于应用程序的文件。
您应该在配置存储库的顶层创建 application.properties 或 application.yml(如果它是基于 git 或 svn 的)。不要忘记commit更改。
终于找到解决办法了。它被埋在 github 的问题中......
https://github.com/spring-cloud/spring-cloud-config/issues/32
它像描述的那样工作。我只注意到,您需要将文件放在 /config 文件夹中才能使其正常工作。如果你把它放在根目录下,配置服务器本身使用的文件是不包含在配置请求中的。
application.properties/application.yml
将在所有应用程序之间共享。application-DEV.properties/application-DEV.yml
将在所有DEV
环境应用程序之间共享。您可以将 DEV
替换为任何 spring
配置文件。{applicationName}.properties/{applicationName}.yml
将在给定应用程序中共享。对于尝试非 git 方法的人来说,这是我的 cloud-config 应用程序的 application.properties
server.port=8762
spring.application.name=cloud-config
spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file:./app-
config,classpath:/app-config
我在我的资源部分下的
app-config文件夹中创建了
application.properties
。它还适用于配置文件。例如:application-prod.properties