Spring 在分布式环境中启动 application.properties?

Spring boot application.properties in distributed environment?

我想在分布式环境中部署我的 spring 启动。一般来说,最佳做法是什么?

1.Each 分布式环境的节点有自己的 application.properties

2.All个分布式环境节点共享一个application.properties

这是我的第一个 spring 引导项目,请不要因为这个问题杀了我:P

我个人会尝试使用配置服务器:Centralized Configuration。基本上,您将配置文件保存在一个 git 存储库中,上面有一个相对简单的 Spring 启动应用程序,您的其他 Spring 启动应用程序可以连接到该应用程序并请求配置。

此外,结合执行器,您还可以在不重新启动应用程序的情况下即时更改配置。

根据您的需要,可以有许多选项,有些是微不足道的,有些则更复杂但更灵活。

一开始,您可以将配置保留在 spring 启动应用程序中,这当然不是理想的方式,但非常简单。 您可以将 application-local.properties、application-production.properties 等放置在您的资源文件夹中,并且 运行 spring 引导应用程序具有您需要的环境的活动配置文件。

另一个更高级的设置是使用配置文件,但将其保存在应用程序之外。 在这里,您将与应用程序分开部署此配置文件,并且这里有许多可能的选项,包括共享文件系统、自动部署等。 您可以 运行 spring 使用 --spring.config.location=<path to configuration file>

启动应用程序

现在,如果您想将配置保存在 git 存储库或文件系统中,并且您的组织中有许多微服务,那么管理它们就会变得一团糟。所以在这种情况下,您可以检查配置服务器。 Spring 引导集成了配置服务器,它是 spring 云项目的一部分。您可以找到 here 更多信息。

这是迄今为止最先进的设置 - 您甚至可以动态更改配置,而不是重新启动 spring 启动微服务(google 用于 spring 启动配置中的可刷新 bean)。此外,您可以将配置保存在 git 存储库中,它将自动使用它。

还有其他解决方案,可能与 spring 启动应用程序的集成较少,但如果您已经在您的组织中使用它们,则可以考虑:etc.d、consul 等。

通常,人们在进入spring引导世界时会从第一个或第二个选项开始,然后采用其中一个备选方案中的第三个选项。

所有两种策略:

  • 分布式环境的每个节点都有自己的 application.properties
  • 分布式环境所有节点共享一个application.properties是不错的选择

这取决于你想要达到什么。

在第一种情况下,我建议遵循每个服务单主机模式并将您的 spring 启动应用程序作为 docker 容器提供,然后将其部署在 AWS ECS、Kubernetes 等编排器上, Swarm 等甚至为每个服务提供单个 VM 可能是一种解决方案,但我认为这可能会很昂贵。

听到的好处是我们的应用程序无需其他开发工作即可使用,因为您拥有代码附近的所有配置,此模式中配置的任何更改都将是一个新部署,将创建一个新 docker 图像在您的 docker 注册表中。通过这种方式,您可以防止配置漂移,并且所有副本都将更新并保持一致,您可能会使用金丝雀部署或蓝绿部署模式。

第二个策略让您拥有与 Cloud Foundry 和 Openshift 等许多 PaaS 类似的配置模式。所有应用程序副本将共享一个配置入口点。

如果 Spring 与 Spring 云,您可以选择 Spring 云配置服务器。在这种情况下,所有应用程序都会向服务器请求配置,可以通过尝试检索配置的嵌入式客户端或通过 Netflix Eureka 或 Consul 等发现服务系统发现服务器。

在这种情况下的好处是您可以动态扩展配置服务器的实例数量将是发现系统,以提供所有已注册的副本。在配置服务器的情况下,您可以受益于许多配置存储,例如文件系统、SVN、GIT 或最近 JDBC。更重要的是,您可以受益于特殊的 @RefreshScope,它将创建您的 bean 作为代理,并且您是否允许通过执行器端点 /actuator/refresh 与最后一个 Spring 云(Finchley ) 或 /refresh 之前的 Spring Cloud 版本,甚至 Spring Cloud Bus 也可用于传播 reshresh 事件。 如果你使用zuul,路由会在发生变化和刷新时更新,这样你就可以用来实现蓝绿部署或金丝雀部署策略。

希望对你有用