在 Azure 容器应用中为 Config Server for Spring 组件配置设置
Config Server for Spring 提供了集中位置来向多个应用程序提供配置数据。 使用以下指南了解如何配置和管理 Config Server for Spring 组件。
显示
可以使用 show
命令按名称查看单个组件的详细信息。
在运行以下命令之前,请将 <>
括起来的占位符替换为你的值。
az containerapp env java-component config-server-for-spring show \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME>
列出
可以使用 list
命令列出所有注册的 Java 组件。
在运行以下命令之前,请将 <>
括起来的占位符替换为你的值。
az containerapp env java-component list \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP>
Bind
使用update
命令的--bind
参数在 Config Server for Spring 组件和你的容器应用之间创建连接。
在运行以下命令之前,请将 <>
括起来的占位符替换为你的值。
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--bind <JAVA_COMPONENT_NAME>
取消绑定
要中断容器应用与 Config Server for Spring 组件之间的连接,请使用update
命令的--unbind
参数。
在运行以下命令之前,请将 <>
括起来的占位符替换为你的值。
az containerapp update \
--name <CONTAINER_APP_NAME> \
--unbind <JAVA_COMPONENT_NAME> \
--resource-group <RESOURCE_GROUP>
配置选项
az containerapp update
命令使用--configuration
参数控制 Config Server for Spring 的配置方式。 只要多个参数被空格分隔,就可以一次性使用它们。 可以在 Spring Cloud Config Server 文档中找到更多详细信息。
下表列出了可用的不同配置值。
Git 后端配置
名称 | 描述 |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
远程存储库的 URI。 |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
使用远程存储库进行身份验证的用户名。 |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
使用远程存储库进行身份验证的密码。 |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
在本地工作副本中使用的搜索路径。 默认情况下,仅搜索根目录。 |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
用于指示存储库应强制拉取的标志。 如果为 true,则放弃任何本地更改并从远程存储库获取。 |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
用于 Git 的默认标签为 main。 如果未设置 spring.cloud.config.server.git.default-label,并且名为 main 的分支不存在,则默认情况下,配置服务器还将尝试签出名为 master 的分支。 如果要禁用回退分支行为,可以将 spring.cloud.config.server.git.tryMasterBranch 设置为 false。 |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
默认情况下,配置服务器将尝试签出名为 master 的分支。 |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
通过将 git.skipSslValidation 属性设置为 true,可以禁用配置服务器的对 Git 服务器的 SSL 证书的验证。 |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
用于指示应在启动时(而不是按需)克隆存储库的标志。 通常会导致启动速度变慢,但第一个查询速度会变快。 |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
获取 HTTP 或 SSH 连接(如果适用)的超时(以秒为单位)。 默认为 5 秒。 |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Config Server 将从你的 Git 后端提取更新后的配置数据的频率。 |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
验证 SSH 私钥。 如果 ignore-local-ssh-settings 为 true 并且 Git URI 为 SSH 格式,则必须设置。 |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
有效的 SSH 主机密钥。 如果还设置了 host-key-algorithm,则必须设置。 |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
ssh-dss、ssh-rsa、ssh-ed25519、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384 或 ecdsa-sha2-nistp521 之一。 如果还设置了主机键,则必须设置。 |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true 或 false。 如果为 false,则忽略主机密钥的错误。 |
spring.cloud.config.server.git.repos.{repoName} |
远程存储库的 URI。 |
spring.cloud.config.server.git.repos.{repoName}.pattern |
模式格式是带通配符的 {application}/{profile} 名称的逗号分隔列表。 如果 {application}/{profile} 与任何模式都不匹配,则它会使用下面定义的默认 URI。 |
常见配置
日志记录相关配置
- logging.level.*
- logging.group.*
- 应禁止使用 logging.* 命名空间下的任何其他配置,例如,应禁止使用
logging.file
写入日志文件。
spring.cloud.config.server.overrides
- 要无条件地发送到所有客户端的属性源的额外映射。
spring.cloud.config.override-none
- 可以通过在远程存储库中设置 spring.cloud.config.override-none=true 标志(默认值为 false)来更改客户端中所有替代的优先级,使它们更像是默认值,让应用程序在环境变量或系统属性中提供自己的值。
spring.cloud.config.allow-override
- 如果启用配置先行启动,则可以允许客户端应用程序通过在来自 Config Server 的应用程序配置中放置两个属性来替代 Config Server 中的配置。
spring.cloud.config.server.health.
- 可以将运行状况指示器配置为检查更多应用程序以及自定义配置文件和自定义标签
spring.cloud.config.server.accept-empty
- 如果找不到应用程序,则可以将
spring.cloud.config.server.accept-empty
设置为false
来让服务器返回 HTTP404
状态。 此标志默认设置为true
。
- 如果找不到应用程序,则可以将
加密和解密(对称)
- encrypt.key
- 使用对称密钥很方便,因为它是一个待配置的属性值。
- spring.cloud.config.server.encrypt.enabled
- 可以将此项设置为
false
以禁用服务器端解密。
- 可以将此项设置为
- encrypt.key
刷新
使用属性的服务需要在更改发生之前知道它。 Config Server for Spring 的默认通知方法涉及手动触发刷新事件,例如通过调用https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
刷新,但如果有许多应用实例,这就可能不可行。
可以改为让配置客户端根据刷新间隔来轮询更改,从而自动刷新 Config Server 中的值。 使用以下步骤自动刷新 Config Server 中的值。
注册计划任务以按给定的间隔刷新上下文,如以下示例所示。
@Configuration @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class}) @EnableScheduling public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer { @Value("${spring.cloud.config.refresh-interval:60}") private long refreshInterval; @Value("${spring.cloud.config.auto-refresh:false}") private boolean autoRefresh; private final RefreshEndpoint refreshEndpoint; public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) { this.refreshEndpoint = refreshEndpoint; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { if (autoRefresh) { // set minimal refresh interval to 5 seconds refreshInterval = Math.max(refreshInterval, 5); scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh, Duration.ofSeconds(refreshInterval)); } } }
在 application.yml 文件中启用
autorefresh
并设置适当的刷新间隔。 在以下示例中,客户端每隔 60 秒钟轮询一次配置更改,这是可为刷新间隔设置的最小值。默认情况下,
autorefresh
设置为false
,refresh-interval
设置为 60 秒。spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
在代码中添加
@RefreshScope
。 在以下示例中,变量connectTimeout
每隔 60 秒钟自动刷新一次。@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
使用对称密钥进行加密和解密
服务器端解密
默认启用服务器端加密。 使用以下步骤在应用程序中启用解密。
在你的 git 存储库中的 .properties 文件中添加加密属性。
例如,你的文件应类似于以下示例:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
更新 Config Server for Spring Java 组件,以使用具有加密属性的 git 存储库并设置加密密钥。
在运行以下命令之前,请将
<>
括起来的占位符替换为你的值。az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
客户端解密
可以按照以下步骤使用属性的客户端解密:
在你的 git 存储库中的
*.properties*
文件中添加加密属性。更新 Config Server for Spring Java 组件以使用具有加密属性的 git 存储库并禁用服务器端解密。
在运行以下命令之前,请将
<>
括起来的占位符替换为你的值。az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
在你的客户端应用中,将解密密钥
ENCRYPT_KEY=randomKey
添加为环境变量。或者,如果在
classpath
上包含了 spring-cloud-starter-bootstrap,或将spring.cloud.bootstrap.enabled=true
设置为系统属性,则在bootstrap.properties
中设置encrypt.key
。在运行以下命令之前,请将
<>
括起来的占位符替换为你的值。az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey