
关于
Azure App Configuration Java SDK。集中式应用配置管理,支持键值设置、功能标志和快照。
name: azure-appconfiguration-java description: Azure App Configuration SDK for Java。集中式应用配置管理,支持键值设置、功能标志和快照。 risk: unknown source: community date_added: '2026-02-27'
Azure App Configuration SDK for Java
Azure App Configuration的客户端库,一个用于集中管理应用配置的托管服务。
安装
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-data-appconfiguration</artifactId>
<version>1.8.0</version>
</dependency>
或使用Azure SDK BOM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-data-appconfiguration</artifactId>
</dependency>
</dependencies>
前置条件
- Azure App Configuration存储
- 连接字符串或Entra ID凭据
环境变量
AZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https://<store>.azconfig.io;Id=<id>;Secret=<secret>
AZURE_APPCONFIG_ENDPOINT=https://<store>.azconfig.io
创建客户端
使用连接字符串
import com.azure.data.appconfiguration.ConfigurationClient;
import com.azure.data.appconfiguration.ConfigurationClientBuilder;
ConfigurationClient configClient = new ConfigurationClientBuilder()
.connectionString(System.getenv("AZURE_APPCONFIG_CONNECTION_STRING"))
.buildClient();
异步客户端
import com.azure.data.appconfiguration.ConfigurationAsyncClient;
ConfigurationAsyncClient asyncClient = new ConfigurationClientBuilder()
.connectionString(connectionString)
.buildAsyncClient();
使用Entra ID(推荐)
import com.azure.identity.DefaultAzureCredentialBuilder;
ConfigurationClient configClient = new ConfigurationClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(System.getenv("AZURE_APPCONFIG_ENDPOINT"))
.buildClient();
核心概念
| 概念 | 描述 | |------|------| | 配置设置 | 带可选标签的键值对 | | 标签 | 用于分隔设置的维度(如环境) | | 功能标志 | 用于功能管理的特殊设置 | | 密钥引用 | 指向Key Vault密钥的设置 | | 快照 | 设置的时间点不可变视图 |
配置设置操作
创建设置(Add)
仅在设置不存在时创建:
import com.azure.data.appconfiguration.models.ConfigurationSetting;
ConfigurationSetting setting = configClient.addConfigurationSetting(
"app/database/connection",
"Production",
"Server=prod.db.com;Database=myapp"
);
创建或更新设置(Set)
创建或覆盖:
ConfigurationSetting setting = configClient.setConfigurationSetting(
"app/cache/enabled",
"Production",
"true"
);
获取设置
ConfigurationSetting setting = configClient.getConfigurationSetting(
"app/database/connection",
"Production"
);
System.out.println("Value: " + setting.getValue());
System.out.println("Content-Type: " + setting.getContentType());
System.out.println("Last Modified: " + setting.getLastModified());
条件获取(如果已更改)
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
Response<ConfigurationSetting> response = configClient.getConfigurationSettingWithResponse(
setting, // Setting with ETag
null, // Accept datetime
true, // ifChanged - only fetch if modified
Context.NONE
);
if (response.getStatusCode() == 304) {
System.out.println("Setting not modified");
} else {
ConfigurationSetting updated = response.getValue();
}
更新设置
ConfigurationSetting updated = configClient.setConfigurationSetting(
"app/cache/enabled",
"Production",
"false"
);
条件更新(如果未更改)
// Only update if ETag matches (no concurrent modifications)
Response<ConfigurationSetting> response = configClient.setConfigurationSettingWithResponse(
setting, // Setting with current ETag
true, // ifUnchanged
Context.NONE
);
删除设置
ConfigurationSetting deleted = configClient.deleteConfigurationSetting(
"app/cache/enabled",
"Production"
);
条件删除
Response<ConfigurationSetting> response = configClient.deleteConfigurationSettingWithResponse(
setting, // Setting with ETag
true, // ifUnchanged
Context.NONE
);
列出和过滤设置
按键模式列出
import com.azure.data.appconfiguration.models.SettingSelector;
SettingSelector selector = new SettingSelector()
.setKeyFilter("app/database/*")
.setLabelFilter("Production");
configClient.listConfigurationSettings(selector)
.forEach(setting -> {
System.out.printf("Key: %s, Value: %s%n",
setting.getKey(), setting.getValue());
});
按标签列出
SettingSelector selector = new SettingSelector()
.setKeyFilter("*")
.setLabelFilter("\0"); // null label only
configClient.listConfigurationSettings(selector)
.forEach(setting -> System.out.println(setting.getKey()));
功能标志
import com.azure.data.appconfiguration.models.FeatureFlagConfigurationSetting;
// 创建功能标志
FeatureFlagConfigurationSetting flag = new FeatureFlagConfigurationSetting("beta-feature", true)
.setLabel("Production")
.setDescription("Enable beta features");
configClient.setConfigurationSetting(flag);
// 读取功能标志
ConfigurationSetting setting = configClient.getConfigurationSetting(
".appconfig.featureflag/beta-feature", "Production");
FeatureFlagConfigurationSetting featureFlag = (FeatureFlagConfigurationSetting) setting;
System.out.println("Enabled: " + featureFlag.isEnabled());
快照
import com.azure.data.appconfiguration.models.ConfigurationSnapshot;
import com.azure.data.appconfiguration.models.SnapshotComposition;
// 创建快照
List<ConfigurationSettingsFilter> filters = List.of(
new ConfigurationSettingsFilter("app/*").setLabel("Production")
);
ConfigurationSnapshot snapshot = configClient.beginCreateSnapshot(
"release-v1.0", filters, null).getFinalResult();
// 列出快照中的设置
configClient.listConfigurationSettingsForSnapshot("release-v1.0")
.forEach(s -> System.out.println(s.getKey()));
最佳实践
- 使用Entra ID认证而非连接字符串
- 使用标签分隔环境(Development、Staging、Production)
- 使用条件操作避免并发冲突
- 使用快照实现配置版本化
- 使用Key Vault引用存储敏感值
兼容工具
Claude CodeCursor
标签
前端开发