[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71REDPVMRAVQQFSM72VXFEY":3,"skill-same:01M71REDPVMRAVQQFSM72VXFEY":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":12,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M71REDPVMRAVQQFSM72VXFEY","azure-appconfiguration-java",null,"javiertarazon\u002Fide-agente-free-jt7-","javiertarazon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F153141207?v=4","01M71R52TB3S9HXKH6WSNT8A7V","01M71R52VG5KS2DKDDH4GDQ30A",0,"MIT","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fazure-appconfiguration-java\u002FSKILL.md",[],[17,18,19],"azure","azure appconfiguration java","java","2026-11-10 13:02:02",false,"---\nname: azure-appconfiguration-java\ndescription: \"|\"\n  Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\n  Triggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\npackage: com.azure:azure-data-appconfiguration\nrisk: unknown\nsource: community\n---\n\n# Azure App Configuration SDK for Java\n\nClient library for Azure App Configuration, a managed service for centralizing application configurations.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-data-appconfiguration\u003C\u002FartifactId>\n    \u003Cversion>1.8.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\nOr use Azure SDK BOM:\n\n```xml\n\u003CdependencyManagement>\n    \u003Cdependencies>\n        \u003Cdependency>\n            \u003CgroupId>com.azure\u003C\u002FgroupId>\n            \u003CartifactId>azure-sdk-bom\u003C\u002FartifactId>\n            \u003Cversion>{bom_version}\u003C\u002Fversion>\n            \u003Ctype>pom\u003C\u002Ftype>\n            \u003Cscope>import\u003C\u002Fscope>\n        \u003C\u002Fdependency>\n    \u003C\u002Fdependencies>\n\u003C\u002FdependencyManagement>\n\n\u003Cdependencies>\n    \u003Cdependency>\n        \u003CgroupId>com.azure\u003C\u002FgroupId>\n        \u003CartifactId>azure-data-appconfiguration\u003C\u002FartifactId>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n```\n\n## Prerequisites\n\n- Azure App Configuration store\n- Connection string or Entra ID credentials\n\n## Environment Variables\n\n```bash\nAZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https:\u002F\u002F\u003Cstore>.azconfig.io;Id=\u003Cid>;Secret=\u003Csecret>\nAZURE_APPCONFIG_ENDPOINT=https:\u002F\u002F\u003Cstore>.azconfig.io\n```\n\n## Client Creation\n\n### With Connection String\n\n```java\nimport com.azure.data.appconfiguration.ConfigurationClient;\nimport com.azure.data.appconfiguration.ConfigurationClientBuilder;\n\nConfigurationClient configClient = new ConfigurationClientBuilder()\n    .connectionString(System.getenv(\"AZURE_APPCONFIG_CONNECTION_STRING\"))\n    .buildClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.data.appconfiguration.ConfigurationAsyncClient;\n\nConfigurationAsyncClient asyncClient = new ConfigurationClientBuilder()\n    .connectionString(connectionString)\n    .buildAsyncClient();\n```\n\n### With Entra ID (Recommended)\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nConfigurationClient configClient = new ConfigurationClientBuilder()\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .endpoint(System.getenv(\"AZURE_APPCONFIG_ENDPOINT\"))\n    .buildClient();\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| Configuration Setting | Key-value pair with optional label |\n| Label | Dimension for separating settings (e.g., environments) |\n| Feature Flag | Special setting for feature management |\n| Secret Reference | Setting pointing to Key Vault secret |\n| Snapshot | Point-in-time immutable view of settings |\n\n## Configuration Setting Operations\n\n### Create Setting (Add)\n\nCreates only if setting doesn't exist:\n\n```java\nimport com.azure.data.appconfiguration.models.ConfigurationSetting;\n\nConfigurationSetting setting = configClient.addConfigurationSetting(\n    \"app\u002Fdatabase\u002Fconnection\", \n    \"Production\", \n    \"Server=prod.db.com;Database=myapp\"\n);\n```\n\n### Create or Update Setting (Set)\n\nCreates or overwrites:\n\n```java\nConfigurationSetting setting = configClient.setConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\", \n    \"true\"\n);\n```\n\n### Get Setting\n\n```java\nConfigurationSetting setting = configClient.getConfigurationSetting(\n    \"app\u002Fdatabase\u002Fconnection\", \n    \"Production\"\n);\nSystem.out.println(\"Value: \" + setting.getValue());\nSystem.out.println(\"Content-Type: \" + setting.getContentType());\nSystem.out.println(\"Last Modified: \" + setting.getLastModified());\n```\n\n### Conditional Get (If Changed)\n\n```java\nimport com.azure.core.http.rest.Response;\nimport com.azure.core.util.Context;\n\nResponse\u003CConfigurationSetting> response = configClient.getConfigurationSettingWithResponse(\n    setting,      \u002F\u002F Setting with ETag\n    null,         \u002F\u002F Accept datetime\n    true,         \u002F\u002F ifChanged - only fetch if modified\n    Context.NONE\n);\n\nif (response.getStatusCode() == 304) {\n    System.out.println(\"Setting not modified\");\n} else {\n    ConfigurationSetting updated = response.getValue();\n}\n```\n\n### Update Setting\n\n```java\nConfigurationSetting updated = configClient.setConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\", \n    \"false\"\n);\n```\n\n### Conditional Update (If Unchanged)\n\n```java\n\u002F\u002F Only update if ETag matches (no concurrent modifications)\nResponse\u003CConfigurationSetting> response = configClient.setConfigurationSettingWithResponse(\n    setting,     \u002F\u002F Setting with current ETag\n    true,        \u002F\u002F ifUnchanged\n    Context.NONE\n);\n```\n\n### Delete Setting\n\n```java\nConfigurationSetting deleted = configClient.deleteConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\"\n);\n```\n\n### Conditional Delete\n\n```java\nResponse\u003CConfigurationSetting> response = configClient.deleteConfigurationSettingWithResponse(\n    setting,     \u002F\u002F Setting with ETag\n    true,        \u002F\u002F ifUnchanged\n    Context.NONE\n);\n```\n\n## List and Filter Settings\n\n### List by Key Pattern\n\n```java\nimport com.azure.data.appconfiguration.models.SettingSelector;\nimport com.azure.core.http.rest.PagedIterable;\n\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002F*\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\nfor (ConfigurationSetting s : settings) {\n    System.out.println(s.getKey() + \" = \" + s.getValue());\n}\n```\n\n### List by Label\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"*\")\n    .setLabelFilter(\"Production\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\n```\n\n### List by Multiple Keys\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002Fdatabase\u002F*,app\u002Fcache\u002F*\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\n```\n\n### List Revisions\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002Fdatabase\u002Fconnection\");\n\nPagedIterable\u003CConfigurationSetting> revisions = configClient.listRevisions(selector);\nfor (ConfigurationSetting revision : revisions) {\n    System.out.println(\"Value: \" + revision.getValue() + \", Modified: \" + revision.getLastModified());\n}\n```\n\n## Feature Flags\n\n### Create Feature Flag\n\n```java\nimport com.azure.data.appconfiguration.models.FeatureFlagConfigurationSetting;\nimport com.azure.data.appconfiguration.models.FeatureFlagFilter;\nimport java.util.Arrays;\n\nFeatureFlagFilter percentageFilter = new FeatureFlagFilter(\"Microsoft.Percentage\")\n    .addParameter(\"Value\", 50);\n\nFeatureFlagConfigurationSetting featureFlag = new FeatureFlagConfigurationSetting(\"beta-feature\", true)\n    .setDescription(\"Beta feature rollout\")\n    .setClientFilters(Arrays.asList(percentageFilter));\n\nFeatureFlagConfigurationSetting created = (FeatureFlagConfigurationSetting)\n    configClient.addConfigurationSetting(featureFlag);\n```\n\n### Get Feature Flag\n\n```java\nFeatureFlagConfigurationSetting flag = (FeatureFlagConfigurationSetting)\n    configClient.getConfigurationSetting(featureFlag);\n\nSystem.out.println(\"Feature: \" + flag.getFeatureId());\nSystem.out.println(\"Enabled: \" + flag.isEnabled());\nSystem.out.println(\"Filters: \" + flag.getClientFilters());\n```\n\n### Update Feature Flag\n\n```java\nfeatureFlag.setEnabled(false);\nFeatureFlagConfigurationSetting updated = (FeatureFlagConfigurationSetting)\n    configClient.setConfigurationSetting(featureFlag);\n```\n\n## Secret References\n\n### Create Secret Reference\n\n```java\nimport com.azure.data.appconfiguration.models.SecretReferenceConfigurationSetting;\n\nSecretReferenceConfigurationSetting secretRef = new SecretReferenceConfigurationSetting(\n    \"app\u002Fsecrets\u002Fapi-key\",\n    \"https:\u002F\u002Fmyvault.vault.azure.net\u002Fsecrets\u002Fapi-key\"\n);\n\nSecretReferenceConfigurationSetting created = (SecretReferenceConfigurationSetting)\n    configClient.addConfigurationSetting(secretRef);\n```\n\n### Get Secret Reference\n\n```java\nSecretReferenceConfigurationSetting ref = (SecretReferenceConfigurationSetting)\n    configClient.getConfigurationSetting(secretRef);\n\nSystem.out.println(\"Secret URI: \" + ref.getSecretId());\n```\n\n## Read-Only Settings\n\n### Set Read-Only\n\n```java\nConfigurationSetting readOnly = configClient.setReadOnly(\n    \"app\u002Fcritical\u002Fsetting\", \n    \"Production\", \n    true\n);\n```\n\n### Clear Read-Only\n\n```java\nConfigurationSetting writable = configClient.setReadOnly(\n    \"app\u002Fcritical\u002Fsetting\", \n    \"Production\", \n    false\n);\n```\n\n## Snapshots\n\n### Create Snapshot\n\n```java\nimport com.azure.data.appconfiguration.models.ConfigurationSnapshot;\nimport com.azure.data.appconfiguration.models.ConfigurationSettingsFilter;\nimport com.azure.core.util.polling.SyncPoller;\nimport com.azure.core.util.polling.PollOperationDetails;\n\nList\u003CConfigurationSettingsFilter> filters = new ArrayList\u003C>();\nfilters.add(new ConfigurationSettingsFilter(\"app\u002F*\"));\n\nSyncPoller\u003CPollOperationDetails, ConfigurationSnapshot> poller = configClient.beginCreateSnapshot(\n    \"release-v1.0\",\n    new ConfigurationSnapshot(filters),\n    Context.NONE\n);\npoller.setPollInterval(Duration.ofSeconds(10));\npoller.waitForCompletion();\n\nConfigurationSnapshot snapshot = poller.getFinalResult();\nSystem.out.println(\"Snapshot: \" + snapshot.getName() + \", Status: \" + snapshot.getStatus());\n```\n\n### Get Snapshot\n\n```java\nConfigurationSnapshot snapshot = configClient.getSnapshot(\"release-v1.0\");\nSystem.out.println(\"Created: \" + snapshot.getCreatedAt());\nSystem.out.println(\"Items: \" + snapshot.getItemCount());\n```\n\n### List Settings in Snapshot\n\n```java\nPagedIterable\u003CConfigurationSetting> settings = \n    configClient.listConfigurationSettingsForSnapshot(\"release-v1.0\");\n\nfor (ConfigurationSetting setting : settings) {\n    System.out.println(setting.getKey() + \" = \" + setting.getValue());\n}\n```\n\n### Archive Snapshot\n\n```java\nConfigurationSnapshot archived = configClient.archiveSnapshot(\"release-v1.0\");\nSystem.out.println(\"Status: \" + archived.getStatus()); \u002F\u002F archived\n```\n\n### Recover Snapshot\n\n```java\nConfigurationSnapshot recovered = configClient.recoverSnapshot(\"release-v1.0\");\nSystem.out.println(\"Status: \" + recovered.getStatus()); \u002F\u002F ready\n```\n\n### List All Snapshots\n\n```java\nimport com.azure.data.appconfiguration.models.SnapshotSelector;\n\nSnapshotSelector selector = new SnapshotSelector().setNameFilter(\"release-*\");\nPagedIterable\u003CConfigurationSnapshot> snapshots = configClient.listSnapshots(selector);\n\nfor (ConfigurationSnapshot snap : snapshots) {\n    System.out.println(snap.getName() + \" - \" + snap.getStatus());\n}\n```\n\n## Labels\n\n### List Labels\n\n```java\nimport com.azure.data.appconfiguration.models.SettingLabelSelector;\n\nconfigClient.listLabels(new SettingLabelSelector().setNameFilter(\"*\"))\n    .forEach(label -> System.out.println(\"Label: \" + label.getName()));\n```\n\n## Async Operations\n\n```java\nConfigurationAsyncClient asyncClient = new ConfigurationClientBuilder()\n    .connectionString(connectionString)\n    .buildAsyncClient();\n\n\u002F\u002F Async list with reactive streams\nasyncClient.listConfigurationSettings(new SettingSelector().setLabelFilter(\"Production\"))\n    .subscribe(\n        setting -> System.out.println(setting.getKey() + \" = \" + setting.getValue()),\n        error -> System.err.println(\"Error: \" + error.getMessage()),\n        () -> System.out.println(\"Completed\")\n    );\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    configClient.getConfigurationSetting(\"nonexistent\", null);\n} catch (HttpResponseException e) {\n    if (e.getResponse().getStatusCode() == 404) {\n        System.err.println(\"Setting not found\");\n    } else {\n        System.err.println(\"Error: \" + e.getMessage());\n    }\n}\n```\n\n## Best Practices\n\n1. **Use labels** — Separate configurations by environment (Dev, Staging, Production)\n2. **Use snapshots** — Create immutable snapshots for releases\n3. **Feature flags** — Use for gradual rollouts and A\u002FB testing\n4. **Secret references** — Store sensitive values in Key Vault\n5. **Conditional requests** — Use ETags for optimistic concurrency\n6. **Read-only protection** — Lock critical production settings\n7. **Use Entra ID** — Preferred over connection strings\n8. **Async client** — Use for high-throughput scenarios\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| Maven Package | https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.azure\u002Fazure-data-appconfiguration |\n| GitHub | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration |\n| API Documentation | https:\u002F\u002Faka.ms\u002Fjava-docs |\n| Product Docs | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-app-configuration |\n| Samples | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration\u002Fsrc\u002Fsamples |\n| Troubleshooting | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration\u002FTROUBLESHOOTING.md |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure App Configuration SDK for Java\n\nClient library for Azure App Configuration, a managed service for centralizing application configurations.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-data-appconfiguration\u003C\u002FartifactId>\n    \u003Cversion>1.8.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\nOr use Azure SDK BOM:\n\n```xml\n\u003CdependencyManagement>\n    \u003Cdependencies>\n        \u003Cdependency>\n            \u003CgroupId>com.azure\u003C\u002FgroupId>\n            \u003CartifactId>azure-sdk-bom\u003C\u002FartifactId>\n            \u003Cversion>{bom_version}\u003C\u002Fversion>\n            \u003Ctype>pom\u003C\u002Ftype>\n            \u003Cscope>import\u003C\u002Fscope>\n        \u003C\u002Fdependency>\n    \u003C\u002Fdependencies>\n\u003C\u002FdependencyManagement>\n\n\u003Cdependencies>\n    \u003Cdependency>\n        \u003CgroupId>com.azure\u003C\u002FgroupId>\n        \u003CartifactId>azure-data-appconfiguration\u003C\u002FartifactId>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n```\n\n## Prerequisites\n\n- Azure App Configuration store\n- Connection string or Entra ID credentials\n\n## Environment Variables\n\n```bash\nAZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https:\u002F\u002F\u003Cstore>.azconfig.io;Id=\u003Cid>;Secret=\u003Csecret>\nAZURE_APPCONFIG_ENDPOINT=https:\u002F\u002F\u003Cstore>.azconfig.io\n```\n\n## Client Creation\n\n### With Connection String\n\n```java\nimport com.azure.data.appconfiguration.ConfigurationClient;\nimport com.azure.data.appconfiguration.ConfigurationClientBuilder;\n\nConfigurationClient configClient = new ConfigurationClientBuilder()\n    .connectionString(System.getenv(\"AZURE_APPCONFIG_CONNECTION_STRING\"))\n    .buildClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.data.appconfiguration.ConfigurationAsyncClient;\n\nConfigurationAsyncClient asyncClient = new ConfigurationClientBuilder()\n    .connectionString(connectionString)\n    .buildAsyncClient();\n```\n\n### With Entra ID (Recommended)\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nConfigurationClient configClient = new ConfigurationClientBuilder()\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .endpoint(System.getenv(\"AZURE_APPCONFIG_ENDPOINT\"))\n    .buildClient();\n```\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| Configuration Setting | Key-value pair with optional label |\n| Label | Dimension for separating settings (e.g., environments) |\n| Feature Flag | Special setting for feature management |\n| Secret Reference | Setting pointing to Key Vault secret |\n| Snapshot | Point-in-time immutable view of settings |\n\n## Configuration Setting Operations\n\n### Create Setting (Add)\n\nCreates only if setting doesn't exist:\n\n```java\nimport com.azure.data.appconfiguration.models.ConfigurationSetting;\n\nConfigurationSetting setting = configClient.addConfigurationSetting(\n    \"app\u002Fdatabase\u002Fconnection\", \n    \"Production\", \n    \"Server=prod.db.com;Database=myapp\"\n);\n```\n\n### Create or Update Setting (Set)\n\nCreates or overwrites:\n\n```java\nConfigurationSetting setting = configClient.setConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\", \n    \"true\"\n);\n```\n\n### Get Setting\n\n```java\nConfigurationSetting setting = configClient.getConfigurationSetting(\n    \"app\u002Fdatabase\u002Fconnection\", \n    \"Production\"\n);\nSystem.out.println(\"Value: \" + setting.getValue());\nSystem.out.println(\"Content-Type: \" + setting.getContentType());\nSystem.out.println(\"Last Modified: \" + setting.getLastModified());\n```\n\n### Conditional Get (If Changed)\n\n```java\nimport com.azure.core.http.rest.Response;\nimport com.azure.core.util.Context;\n\nResponse\u003CConfigurationSetting> response = configClient.getConfigurationSettingWithResponse(\n    setting,      \u002F\u002F Setting with ETag\n    null,         \u002F\u002F Accept datetime\n    true,         \u002F\u002F ifChanged - only fetch if modified\n    Context.NONE\n);\n\nif (response.getStatusCode() == 304) {\n    System.out.println(\"Setting not modified\");\n} else {\n    ConfigurationSetting updated = response.getValue();\n}\n```\n\n### Update Setting\n\n```java\nConfigurationSetting updated = configClient.setConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\", \n    \"false\"\n);\n```\n\n### Conditional Update (If Unchanged)\n\n```java\n\u002F\u002F Only update if ETag matches (no concurrent modifications)\nResponse\u003CConfigurationSetting> response = configClient.setConfigurationSettingWithResponse(\n    setting,     \u002F\u002F Setting with current ETag\n    true,        \u002F\u002F ifUnchanged\n    Context.NONE\n);\n```\n\n### Delete Setting\n\n```java\nConfigurationSetting deleted = configClient.deleteConfigurationSetting(\n    \"app\u002Fcache\u002Fenabled\", \n    \"Production\"\n);\n```\n\n### Conditional Delete\n\n```java\nResponse\u003CConfigurationSetting> response = configClient.deleteConfigurationSettingWithResponse(\n    setting,     \u002F\u002F Setting with ETag\n    true,        \u002F\u002F ifUnchanged\n    Context.NONE\n);\n```\n\n## List and Filter Settings\n\n### List by Key Pattern\n\n```java\nimport com.azure.data.appconfiguration.models.SettingSelector;\nimport com.azure.core.http.rest.PagedIterable;\n\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002F*\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\nfor (ConfigurationSetting s : settings) {\n    System.out.println(s.getKey() + \" = \" + s.getValue());\n}\n```\n\n### List by Label\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"*\")\n    .setLabelFilter(\"Production\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\n```\n\n### List by Multiple Keys\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002Fdatabase\u002F*,app\u002Fcache\u002F*\");\n\nPagedIterable\u003CConfigurationSetting> settings = configClient.listConfigurationSettings(selector);\n```\n\n### List Revisions\n\n```java\nSettingSelector selector = new SettingSelector()\n    .setKeyFilter(\"app\u002Fdatabase\u002Fconnection\");\n\nPagedIterable\u003CConfigurationSetting> revisions = configClient.listRevisions(selector);\nfor (ConfigurationSetting revision : revisions) {\n    System.out.println(\"Value: \" + revision.getValue() + \", Modified: \" + revision.getLastModified());\n}\n```\n\n## Feature Flags\n\n### Create Feature Flag\n\n```java\nimport com.azure.data.appconfiguration.models.FeatureFlagConfigurationSetting;\nimport com.azure.data.appconfiguration.models.FeatureFlagFilter;\nimport java.util.Arrays;\n\nFeatureFlagFilter percentageFilter = new FeatureFlagFilter(\"Microsoft.Percentage\")\n    .addParameter(\"Value\", 50);\n\nFeatureFlagConfigurationSetting featureFlag = new FeatureFlagConfigurationSetting(\"beta-feature\", true)\n    .setDescription(\"Beta feature rollout\")\n    .setClientFilters(Arrays.asList(percentageFilter));\n\nFeatureFlagConfigurationSetting created = (FeatureFlagConfigurationSetting)\n    configClient.addConfigurationSetting(featureFlag);\n```\n\n### Get Feature Flag\n\n```java\nFeatureFlagConfigurationSetting flag = (FeatureFlagConfigurationSetting)\n    configClient.getConfigurationSetting(featureFlag);\n\nSystem.out.println(\"Feature: \" + flag.getFeatureId());\nSystem.out.println(\"Enabled: \" + flag.isEnabled());\nSystem.out.println(\"Filters: \" + flag.getClientFilters());\n```\n\n### Update Feature Flag\n\n```java\nfeatureFlag.setEnabled(false);\nFeatureFlagConfigurationSetting updated = (FeatureFlagConfigurationSetting)\n    configClient.setConfigurationSetting(featureFlag);\n```\n\n## Secret References\n\n### Create Secret Reference\n\n```java\nimport com.azure.data.appconfiguration.models.SecretReferenceConfigurationSetting;\n\nSecretReferenceConfigurationSetting secretRef = new SecretReferenceConfigurationSetting(\n    \"app\u002Fsecrets\u002Fapi-key\",\n    \"https:\u002F\u002Fmyvault.vault.azure.net\u002Fsecrets\u002Fapi-key\"\n);\n\nSecretReferenceConfigurationSetting created = (SecretReferenceConfigurationSetting)\n    configClient.addConfigurationSetting(secretRef);\n```\n\n### Get Secret Reference\n\n```java\nSecretReferenceConfigurationSetting ref = (SecretReferenceConfigurationSetting)\n    configClient.getConfigurationSetting(secretRef);\n\nSystem.out.println(\"Secret URI: \" + ref.getSecretId());\n```\n\n## Read-Only Settings\n\n### Set Read-Only\n\n```java\nConfigurationSetting readOnly = configClient.setReadOnly(\n    \"app\u002Fcritical\u002Fsetting\", \n    \"Production\", \n    true\n);\n```\n\n### Clear Read-Only\n\n```java\nConfigurationSetting writable = configClient.setReadOnly(\n    \"app\u002Fcritical\u002Fsetting\", \n    \"Production\", \n    false\n);\n```\n\n## Snapshots\n\n### Create Snapshot\n\n```java\nimport com.azure.data.appconfiguration.models.ConfigurationSnapshot;\nimport com.azure.data.appconfiguration.models.ConfigurationSettingsFilter;\nimport com.azure.core.util.polling.SyncPoller;\nimport com.azure.core.util.polling.PollOperationDetails;\n\nList\u003CConfigurationSettingsFilter> filters = new ArrayList\u003C>();\nfilters.add(new ConfigurationSettingsFilter(\"app\u002F*\"));\n\nSyncPoller\u003CPollOperationDetails, ConfigurationSnapshot> poller = configClient.beginCreateSnapshot(\n    \"release-v1.0\",\n    new ConfigurationSnapshot(filters),\n    Context.NONE\n);\npoller.setPollInterval(Duration.ofSeconds(10));\npoller.waitForCompletion();\n\nConfigurationSnapshot snapshot = poller.getFinalResult();\nSystem.out.println(\"Snapshot: \" + snapshot.getName() + \", Status: \" + snapshot.getStatus());\n```\n\n### Get Snapshot\n\n```java\nConfigurationSnapshot snapshot = configClient.getSnapshot(\"release-v1.0\");\nSystem.out.println(\"Created: \" + snapshot.getCreatedAt());\nSystem.out.println(\"Items: \" + snapshot.getItemCount());\n```\n\n### List Settings in Snapshot\n\n```java\nPagedIterable\u003CConfigurationSetting> settings = \n    configClient.listConfigurationSettingsForSnapshot(\"release-v1.0\");\n\nfor (ConfigurationSetting setting : settings) {\n    System.out.println(setting.getKey() + \" = \" + setting.getValue());\n}\n```\n\n### Archive Snapshot\n\n```java\nConfigurationSnapshot archived = configClient.archiveSnapshot(\"release-v1.0\");\nSystem.out.println(\"Status: \" + archived.getStatus()); \u002F\u002F archived\n```\n\n### Recover Snapshot\n\n```java\nConfigurationSnapshot recovered = configClient.recoverSnapshot(\"release-v1.0\");\nSystem.out.println(\"Status: \" + recovered.getStatus()); \u002F\u002F ready\n```\n\n### List All Snapshots\n\n```java\nimport com.azure.data.appconfiguration.models.SnapshotSelector;\n\nSnapshotSelector selector = new SnapshotSelector().setNameFilter(\"release-*\");\nPagedIterable\u003CConfigurationSnapshot> snapshots = configClient.listSnapshots(selector);\n\nfor (ConfigurationSnapshot snap : snapshots) {\n    System.out.println(snap.getName() + \" - \" + snap.getStatus());\n}\n```\n\n## Labels\n\n### List Labels\n\n```java\nimport com.azure.data.appconfiguration.models.SettingLabelSelector;\n\nconfigClient.listLabels(new SettingLabelSelector().setNameFilter(\"*\"))\n    .forEach(label -> System.out.println(\"Label: \" + label.getName()));\n```\n\n## Async Operations\n\n```java\nConfigurationAsyncClient asyncClient = new ConfigurationClientBuilder()\n    .connectionString(connectionString)\n    .buildAsyncClient();\n\n\u002F\u002F Async list with reactive streams\nasyncClient.listConfigurationSettings(new SettingSelector().setLabelFilter(\"Production\"))\n    .subscribe(\n        setting -> System.out.println(setting.getKey() + \" = \" + setting.getValue()),\n        error -> System.err.println(\"Error: \" + error.getMessage()),\n        () -> System.out.println(\"Completed\")\n    );\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    configClient.getConfigurationSetting(\"nonexistent\", null);\n} catch (HttpResponseException e) {\n    if (e.getResponse().getStatusCode() == 404) {\n        System.err.println(\"Setting not found\");\n    } else {\n        System.err.println(\"Error: \" + e.getMessage());\n    }\n}\n```\n\n## Best Practices\n\n1. **Use labels** — Separate configurations by environment (Dev, Staging, Production)\n2. **Use snapshots** — Create immutable snapshots for releases\n3. **Feature flags** — Use for gradual rollouts and A\u002FB testing\n4. **Secret references** — Store sensitive values in Key Vault\n5. **Conditional requests** — Use ETags for optimistic concurrency\n6. **Read-only protection** — Lock critical production settings\n7. **Use Entra ID** — Preferred over connection strings\n8. **Async client** — Use for high-throughput scenarios\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| Maven Package | https:\u002F\u002Fcentral.sonatype.com\u002Fartifact\u002Fcom.azure\u002Fazure-data-appconfiguration |\n| GitHub | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration |\n| API Documentation | https:\u002F\u002Faka.ms\u002Fjava-docs |\n| Product Docs | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fazure-app-configuration |\n| Samples | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Ftree\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration\u002Fsrc\u002Fsamples |\n| Troubleshooting | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-java\u002Fblob\u002Fmain\u002Fsdk\u002Fappconfiguration\u002Fazure-data-appconfiguration\u002FTROUBLESHOOTING.md |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{},"release\u002Fv4.2.11-panel-pro","a92ea02bcf7e2b3dbaf46d49696c29a3cb490d4f",".github\u002Fskills\u002Fazure-appconfiguration-java","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-","https:\u002F\u002Fgithub.com\u002Fjaviertarazon","2026-07-12 07:10:45",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-appconfiguration-java",{"tool":37,"command":38},"bunx","bunx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-appconfiguration-java",{"tool":40,"command":41},"pnpm","pnpm dlx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-appconfiguration-java","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fazure-appconfiguration-java\u002FSKILL.md",true,[],[46,78,105,125,140,162],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":57,"publishedAt":20},"01M71TQ7Q6Z10VWF3C2H5X1KW9","zustand-store-ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reacti...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzustand-store-ts\u002FSKILL.md",[52],{"categoryNo":53,"categoryName":54,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77],"zustand","store","zustand store ts","community","middleware","implementing","use","react state management","when","unknown","react","with","state","create","state management","typescript","action","management","separation","global",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":87,"publishedAt":20},"01M71TQ5EAR40G6W0MV5ZDVEZT","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoom-automation\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000023","Skill与智能体开发",[88,89,90,61,91,92,93,94,95,67,96,97,98,99,100,101,102,103,75,104],"zoom automation","zoom","automation","creation","for","search","schemas","MCP","first","via","meeting","search tools","tracking","webinars","composio","recordings","Tools",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":112,"publishedAt":20},"01M71TQ29B1EYBCEAP1ZBGXQ1A","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoho-crm-automation\u002FSKILL.md",[111],{"categoryNo":85,"categoryName":86,"taxonomyType":55,"taxonomyTypeDesc":56},[113,114,90,115,116,117,61,118,119,92,120,93,94,121,95,67,122,123,124,71],"crm automation","zoho crm automation","crm","zoho crm","zoho","leads","manage leads","manage","records","convert","tasks","contacts",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":132,"publishedAt":20},"01M71TPZPMN60DH0XV58KVHY23","zendesk-automation","Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzendesk-automation\u002FSKILL.md",[131],{"categoryNo":85,"categoryName":86,"taxonomyType":55,"taxonomyTypeDesc":56},[133,90,134,61,92,93,94,95,135,67,123,136,137,96,97,138,99,102,104,139],"zendesk automation","zendesk","organizations","replies","users","tickets","automate",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":20},"01M71TPXDWKHKG4N6TVEPXWD0N","zapier-make-patterns","No-code automation democratizes workflow building. Zapier and Make (formerly Integromat) let non-developers automate business processes without writing code. But no-code doesn't mean no-complexity ...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzapier-make-patterns\u002FSKILL.md",[],[147,148,149,150,151,152,153,154,155,90,156,67,157,158,159,160,161,139],"zapier make patterns","zapier","patterns","make","No-Code","complexity","writing","spawner","business","workflow","code","integromat","apache","processes","but",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":171,"publishedAt":20},"01M71TPT5T10WXNKW9G7ZXZ27W","youtube-summarizer","Extract transcripts from YouTube videos and generate comprehensive, detailed summaries using intelligent analysis frameworks","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fyoutube-summarizer\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":55,"taxonomyTypeDesc":56},"01JBSEEDCAT000000000000016","图像与多媒体",[172,173,174,175,61,176,177,178,179,180,181,182,157,183,184,185,186,187,188,189],"summarizer","youtube","youtube summarizer","Video","content-analysis","frameworks","copilot","2025","github-copilot","extract transcripts","analysis","codex","cli","summaries","github","generate","summarization","2026"]