【问题标题】:Spring boot application.properties in distributed environment?分布式环境中的Spring Boot application.properties?
【发布时间】:2018-12-05 14:45:27
【问题描述】:

我想在分布式环境中部署我的 Spring Boot。一般来说,遵循的最佳做法是什么?

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

2.分布式环境的所有节点共享一个application.properties

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

【问题讨论】:

    标签: spring-boot application.properties


    【解决方案1】:

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

    首先,您可以将配置保留在 Spring Boot 应用程序中,这当然不是理想的方式,但它非常简单。 您可以将 application-local.properties、application-production.properties 等放在资源文件夹中,并为您需要的环境运行带有活动配置文件的 spring boot 应用程序。

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

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

    这是迄今为止最先进的设置——您甚至可以动态更改配置而不重新启动 Spring Boot 微服务(谷歌搜索 Spring Boot 配置中的 Refreshable beans)。此外,您可以将配置保存在 git 存储库中,它会自动使用它。

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

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

    【讨论】:

      【解决方案2】:

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

      此外,与执行器结合使用时,它还使您能够即时更改配置,而无需重新启动应用程序。

      【讨论】:

        【解决方案3】:

        所有两种策略:

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

        这取决于你想要达到的目标。

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

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

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

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

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

        希望对你有用

        【讨论】:

        • Spring Cloud 配置服务器(我称之为配置服务器)实际上并不需要 Sping Cloud - 请参阅我的答案中的链接。
        • em............ Spring Cloud Configuration Server不可能不需要Spring Cloud,因为它是Spring Cloud Umbrella下的一个项目...... .........
        • 您阅读过我提供链接的指南吗?没有任何关于将任何东西部署到 Spring Cloud 的内容 - 一切都在您的本地机器上。此外,我相当确定 Spring Boot 应用程序从服务器读取配置的选项在引入 Spring Cloud 之前就已经存在。
        • ........ 如果您使用 start.spring.io 网站生成项目并选择 Config server and web 作为依赖项,如果您解压缩 jar,则构建项目可以看到在 jar 中你有 spring-cloud-commonsdependedny 例如............我说使用集中配置将使用 Spring Cloud 项目而不是你已经部署在云上
        • 对于我的硕士论文,我使用了许多 Spring Cloud 项目,但都在我的机器上运行
        猜你喜欢
        • 2016-08-08
        • 2016-06-08
        • 2021-08-23
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 2019-09-18
        相关资源
        最近更新 更多