158. Spring Cloud Config

Spring Cloud GCP 可以将Google Runtime Configuration API用作Spring Cloud Config服务器来远程存储您的应用程序配置数据。

Spring Cloud GCP Config 支持通过其自己的 Spring Boot 启动器提供。它将 Google Runtime Configuration API 用作 Spring Boot 配置属性的来源。

Note

Google Cloud Runtime Configuration 服务处于 Beta 状态。

使用 Spring Cloud GCP BOM 进行 Maven 坐标:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-config</artifactId>
</dependency>

Gradle coordinates:

dependencies {
    compile group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter-config'
}

158.1 Configuration

以下参数可在 Spring Cloud GCP Config 中配置:

NameDescriptionRequiredDefault value
spring.cloud.gcp.config.enabled启用配置 Client 端Nofalse
spring.cloud.gcp.config.name您的申请名称Nospring.application.name属性的值。如果没有,则application
spring.cloud.gcp.config.profileActive profileNospring.profiles.active属性的值。如果不止一个配置文件,则选择最后一个
spring.cloud.gcp.config.timeout-millis连接到 Google Runtime Configuration API 的超时时间(以毫秒为单位)No60000
spring.cloud.gcp.config.project-id托管 Google Runtime Configuration API 的 GCP 项目 IDNo
spring.cloud.gcp.config.credentials.locationOAuth2 凭据,用于通过 Google Runtime Configuration API 进行身份验证No
spring.cloud.gcp.config.credentials.encoded-keyBase64 编码的 OAuth2 凭据,用于通过 Google Runtime Configuration API 进行身份验证No
spring.cloud.gcp.config.credentials.scopesOAuth2 scope用于 Spring Cloud GCP Config 凭据Nohttps://www.googleapis.com/auth/cloudruntimeconfig

Note

这些属性应在bootstrap.yml/bootstrap.properties文件中指定,而不是通常的applications.yml/application.properties

Note

Spring Cloud GCP 核心模块中所述的核心属性不适用于 Spring Cloud GCP Config。

158.2 快速Starter

  • 在 Google Runtime Configuration API 中创建名为${spring.application.name}_${spring.profiles.active}的配置。换句话说,如果spring.application.namemyappspring.profiles.activeprod,则该配置应称为myapp_prod

为此,您应该安装Google Cloud SDK,拥有一个 Google Cloud Project 并运行以下命令:

gcloud init # if this is your first Google Cloud SDK run.
gcloud beta runtime-config configs create myapp_prod
gcloud beta runtime-config configs variables set myapp.queue-size 25 --config-name myapp_prod
  • 使用应用程序的配置数据配置bootstrap.properties文件:
spring.application.name=myapp
spring.profiles.active=prod
  • @ConfigurationPropertiesComments 添加到 Spring 托管的 bean 中:
@Component
@ConfigurationProperties("myapp")
public class SampleConfig {

  private int queueSize;

  public int getQueueSize() {
    return this.queueSize;
  }

  public void setQueueSize(int queueSize) {
    this.queueSize = queueSize;
  }
}

当您的 Spring 应用程序启动时,上述SampleConfig bean 的queueSize字段值将设置为 25.

158.3 在运行时刷新配置

Spring Cloud提供支持以使配置参数可随/actuator/refresh端点的 POST 请求重新加载。

  • 添加 Spring Boot Actuator 依赖项:

Maven coordinates:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Gradle coordinates:

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
}
  • @RefreshScope添加到您的 Spring 配置类中,以使参数可以在运行时重新加载。

  • management.endpoints.web.exposure.include=refresh添加到您的application.properties以允许不受限制地访问/actuator/refresh

  • 使用gcloud更新属性:

$ gcloud beta runtime-config configs variables set \
  myapp.queue_size 200 \
  --config-name myapp_prod
  • 发送 POST 请求到刷新端点:
$ curl -XPOST http://myapp.host.com/actuator/refresh

158.4 Sample

sample applicationcodelab可用。