代码之家  ›  专栏  ›  技术社区  ›  Manas Saxena

在分布式环境中的spring boot application.properties?

  •  2
  • Manas Saxena  · 技术社区  · 6 年前

    我想在分布式环境中部署我的Spring引导。一般来说,遵循的最佳实践是什么?

    1.分布式环境的每个节点都有自己的application.properties

    2.分布式环境的所有节点共享一个应用程序属性

    这是我的第一个春靴项目,请不要因为这个问题杀了我:p

    3 回复  |  直到 6 年前
        1
  •  2
  •   Mark Bramnik    6 年前

    根据您的需要,有许多选择是可能的,有些是琐碎的,有些是更复杂但更灵活的。

    首先,您可以将配置保存在SpringBoot应用程序中,这当然不是理想的方法,但非常简单。 您可以将application-local.properties、application-production.properties等放在resources文件夹中,并使用所需环境的活动配置文件运行Spring引导应用程序。

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

    现在,如果您希望将配置保存在Git存储库或文件系统中,并且您的组织中有许多微服务,那么管理它们就变得一团糟。因此,在这种情况下,您可以检查配置服务器。SpringBoot与配置服务器集成,后者是SpringCloud项目的一部分。你可以找到 here 更多信息。

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

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

    通常,人们在进入SpringBootWorld时,从第一个或第二个选项开始,然后采用其中一个选项的第三个选项。

        2
  •  1
  •   Konrad Botor    6 年前

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

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

        3
  •  0
  •   Valerio Vaudi    6 年前

    这两种策略都是:

    • 分布式环境的每个节点都有自己的application.properties
    • 分布式环境的所有节点共享一个应用程序。属性是很好的选择

    这取决于你想要实现什么。

    在第一种情况下,我建议遵循每个服务模式下的单个主机,并将您的Spring引导应用程序作为Docker容器,然后将其部署到一个编排器上,如AWS ECS、Kubernetes、Swarm等等,甚至为每个服务提供一个虚拟机可能是一个解决方案,但我认为这可能需要花费E.

    所听到的好处是,我们的应用程序可以在不进行其他开发工作的情况下使用,因为您的所有配置都接近您的代码,此模式中的任何配置更改都将是一个新的部署,它将在Docker注册表上创建一个新的Docker映像。通过这种方式,您可以防止配置漂移,所有和所有副本都将被更新并保持一致,您可能会使用金丝雀部署或蓝绿色部署模式。

    第二个策略使您拥有类似于许多PaaS的配置模式,如CloudFoundry和Openshift。所有应用程序副本将共享一个配置入口点。

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

    这种情况下的好处是,您可以按常规扩展配置服务器的实例数量,发现系统将提供已注册的所有副本。在配置服务器的情况下,您可以受益于许多配置存储,如文件系统、SVN、Git或最近的JDBC。更重要的是,你可以从中受益 @RefreshScope 这将创建您的bean作为代理,并允许您通过执行器端点/actuator/refresh(最后一个Spring Cloud(finchley))或/refresh(前一个Spring Cloud版本)在hot上对配置进行刷新,甚至可以使用Spring Cloud总线来传播reshresh事件。 如果您使用zuul,那么在更改和刷新的情况下,路由将被更新,这样您就可以用来实现蓝绿色部署或金丝雀部署策略。

    希望对你有用