【译】Spring Config与PCF应用程序集成:循序渐进指南

216 阅读3分钟

为什么要使用Spring配置?

Spring Cloud Config为分布式系统中的外部化配置提供支持。它允许您将配置属性的更新动态推送到应用程序,而无需重新启动或重新部署。

与PCF应用程序集成的分步指南

步骤1:添加Maven依赖项

pom.xml

步骤2:将refreshscope和EnableAutoConfiguration添加到模型类

如果要在任何其他类中自动装配此模型对象,请确保也将refreshscope添加到该类。

步骤3:启用执行器端点

默认情况下,仅启用/health/info端点。通过显式声明或使用通配符将它们全部启用,从而启用其他端点。

将以下行添加到application.properties文件中以启用/refresh端点:

management.endpoints.web.exposure.include=refresh 

您还可以通过在application.properties文件中添加以下代码来禁用本教程的默认安全性:

management.security.enabled=false

或通过将以下代码行添加到您的Spring Boot应用程序中:

注意:对于本教程,安全性被禁用以便访问执行器端点。在生产环境中,您必须考虑安全性。

步骤4:将属性添加到application.properties文件

person.company=ABC

步骤5:构建应用程序并将其部署到Cloud Foundry

cf push

从应用程序的根文件夹中运行以上命令。使用该manifest.yml文件声明您的应用名称:

步骤6:在CF中创建Spring Server的实例

从PCF Marketplace选择Spring Config创建一个实例。

使用JSON输入GitLab信息:

img

使用以下格式输入您的JSON数据:

img

  • uri -GitLab URL的HTTP URL。
  • searchPaths-应用程序应在其中搜索配置文件的GitLab URL子文件夹。如果未指定,则应用程序将在“ uri”属性指定的当前文件夹中搜索。
  • username -登录上述GitLab URL的用户帐户。它必须具有从其中读取配置文件的GitLab URL的读取权限。
  • password -GitLab用户名附带的密码。
  • label-指定要使用哪个GitLab分支来读取配置文件。如果未指定,则默认为“主分支”。

步骤7:将您的应用绑定到上述服务实例

img

如果成功创建了服务实例,则可以从服务实例管理器中查看它:

img

如果已成功绑定到应用程序,则应该看到如下日志条目:

测验

步骤1:在GitLab中的配置文件中添加/更新属性值

  1. 在上面的属性中提供的文件夹下创建一个名为aspringconfig-demo-cloud.properties(文件名遵循命名约定<application_name>-<active-profile-name>.properties)的文件serachPaths。确保将此文件放在uri上面属性中提供的GitLab URL下。
  2. 添加一个新值person.companyperson.company=XYZ
  3. 将文件提交到GitLab。

步骤2:呼叫执行器/刷新端点以刷新/重新加载属性

此调用将返回在步骤1中更改的属性。您的应用程序现在具有对更新值的引用:

img

内部如何运作?

使用声明Spring bean时@refreshscope,将为该bean创建代理包装。该代理类与基础bean类交互以返回值。

在Spring中发生刷新事件时:

  1. 使代理类无效。
  2. 重新加载配置文件。
  3. 重新创建基础bean类。
  4. 返回新值。

尽管此功能的好处是在运行时将其更新为新值,但应注意在刷新事件中,Spring Bean在重新创建之前将变为无效。如果用户当时正在使用Bean,则他们可能会遇到500错误或类似错误。

文件优先

  • GitLab配置文件的优先规则也与常规Spring Boot应用程序中的规则相同:
    • 活动配置文件优先于默认设置。
    • 特定于配置文件的属性文件将覆盖以应用程序命名的属性文件,而该应用程序命名的属性文件将覆盖非特定属性文件(例如application.properties文件或application.yml文件)。

如果应用程序名称为“ foo”,配置文件名称为“ dev”,则foo-dev.properties覆盖foo.properties文件。该foo.properties文件将覆盖application.properties文件。

指定多个文件时,后一个文件可以覆盖前一个文件的值。