From 5682ebbb11dd8afa77d7595e34595c78d1612b69 Mon Sep 17 00:00:00 2001 From: Matt Metcalf Date: Tue, 28 Oct 2025 15:58:01 -0700 Subject: [PATCH] Update to 6.0.0 --- .../src/main/resources/application.properties | 2 + .../src/main/resources/bootstrap.properties | 4 -- .../README.md | 7 ++- .../{bootstrap.yaml => application.yaml} | 2 + .../src/main/resources/application.yml | 43 +++++++++++-------- .../src/main/resources/application.yml | 14 +++--- .../README.md | 28 ++++++++++++ .../main/java/example/HelloController.java | 14 ++++++ ...trap.properties => application.properties} | 8 ++++ .../README.md | 28 ++++++++++++ ...trap.properties => application.properties} | 9 +++- 11 files changed, 128 insertions(+), 31 deletions(-) create mode 100644 appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/application.properties delete mode 100644 appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/bootstrap.properties rename appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/{bootstrap.yaml => application.yaml} (84%) rename appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/{bootstrap.properties => application.properties} (52%) rename appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/{bootstrap.properties => application.properties} (54%) diff --git a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/application.properties b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/application.properties new file mode 100644 index 000000000..e6156841d --- /dev/null +++ b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.config.import=azureAppConfiguration +spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING} \ No newline at end of file diff --git a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/bootstrap.properties b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/bootstrap.properties deleted file mode 100644 index cd27d4628..000000000 --- a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-complete/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,4 +0,0 @@ -spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING} -spring.cloud.azure.cosmos.endpoint=${COSMOS-URL} -spring.cloud.azure.cosmos.key=${COSMOS-KEY} -spring.cloud.azure.cosmos.database=${COSMOS-DATABASENAME} \ No newline at end of file diff --git a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-initial/README.md b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-initial/README.md index 9a44f7297..9220038b9 100644 --- a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-initial/README.md +++ b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-convert-sample/spring-cloud-azure-appconfiguration-config-convert-sample-initial/README.md @@ -179,11 +179,10 @@ In this section, you clone a containerized Spring Boot application and test it l az appconfig kv set-keyvault --name myConfigStoreName --key "/application/azure.cosmos.key" --secret-identifier https://myVaultName.vault.azure.net/secrets/COSMOSDB-KEY --yes ``` -1. Delete `application.propertes` from `src/main/resources`. +1. Update the application.yml file to now include, removing the other values. -1. Create a new file called `bootstrap.properties` in `src/main/resources`, and add the following. - - ```properties + ```yaml + spring.config.import=azureAppConfiguration spring.cloud.azure.appconfiguration.stores[0].endpoint=https://{my-configstore-name}.azconfig.io ``` diff --git a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/bootstrap.yaml b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/application.yaml similarity index 84% rename from appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/bootstrap.yaml rename to appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/application.yaml index 3103def50..022db5453 100644 --- a/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/bootstrap.yaml +++ b/appconfiguration/spring-cloud-azure-appconfiguration-config/spring-cloud-azure-appconfiguration-config-sample/src/main/resources/application.yaml @@ -1,6 +1,8 @@ # Use default application name and no profile configured # Keys starting with /application/ will be matched spring: + config: + import: azureAppConfiguration cloud: azure: appconfiguration: diff --git a/appconfiguration/spring-cloud-azure-feature-management-web/spring-cloud-azure-feature-management-web-sample/src/main/resources/application.yml b/appconfiguration/spring-cloud-azure-feature-management-web/spring-cloud-azure-feature-management-web-sample/src/main/resources/application.yml index 4a713dce3..2eb41c429 100644 --- a/appconfiguration/spring-cloud-azure-feature-management-web/spring-cloud-azure-feature-management-web-sample/src/main/resources/application.yml +++ b/appconfiguration/spring-cloud-azure-feature-management-web/spring-cloud-azure-feature-management-web-sample/src/main/resources/application.yml @@ -10,20 +10,29 @@ spring: config: message: Hi feature-management: - Beta: true - dark-theme: - enabled-for: - - - name: Random - parameters: - chance: "50" - beta-ab: - enabled-for: - - - name: Random - parameters: - chance: "50" - - - name: ClientFilter - parameters: - clientIp: 10.0.0.1 \ No newline at end of file + feature-flags: + - + id: beta + enabled: true + - + id: dark-theme + enabled: true + conditions: + client-filters: + - + name: Random + parameters: + chance: "50" + - + id: beta-ab + enabled: true + conditions: + client-filters: + - + name: Random + parameters: + chance: "50" + - + name: ClientFilter + parameters: + clientIp: 10.0.0.1 \ No newline at end of file diff --git a/appconfiguration/spring-cloud-azure-feature-management/spring-cloud-azure-feature-management-sample/src/main/resources/application.yml b/appconfiguration/spring-cloud-azure-feature-management/spring-cloud-azure-feature-management-sample/src/main/resources/application.yml index 0160c6fd2..7d25b903b 100644 --- a/appconfiguration/spring-cloud-azure-feature-management/spring-cloud-azure-feature-management-sample/src/main/resources/application.yml +++ b/appconfiguration/spring-cloud-azure-feature-management/spring-cloud-azure-feature-management-sample/src/main/resources/application.yml @@ -1,6 +1,10 @@ feature-management: - beta: - enabled-for: - - name: Random - parameters: - chance: "80" \ No newline at end of file + feature-flags: + - + id: beta + enabled: true + conditions: + client-filters: + - name: Random + parameters: + chance: "80" diff --git a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/README.md b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/README.md index 867e20fe8..7cc895520 100644 --- a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/README.md +++ b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/README.md @@ -31,6 +31,12 @@ description: This sample demonstrates how to refresh configuration properties fr az appconfig kv set --key /application/config.message --value testKey --name --yes ``` +1. Create the feature flag in your new store: + + ```azurecli + az appconfig feature set --feature alpha --name + ``` + 1. Create monitor trigger. ```azurecli @@ -91,6 +97,28 @@ This value should match the `spring.cloud.azure.appconfiguration.stores[0].monit 1. After a couple seconds refresh again, this time the new value `updatedTestKey` will show. +1. Go to `localhost:8080/feature-flag/alpha` which will display the status of the feature flag. + +1. Update the feature flag in your App Configuration store. + + ```azurecli + az appconfig feature enable --feature alpha --name + ``` + +1. Refresh page, this will trigger the refresh update. + +1. After a couple seconds refresh again, this time the new value `updatedTestKey` will show. + +1. Go to `localhost:8080/feature-flag/alpha` which will display the status of the feature flag. + +1. Update the feature flag in your App Configuration store. + + ```azurecli + az appconfig feature enable --feature alpha --name + ``` + +1. After a couple seconds refresh the page twice, this time the feature flag status will show as enabled. + ## Deploy to Azure Spring Apps Now that you have the Spring Boot application running locally, it's time to move it to production. [Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/overview) makes it easy to deploy Spring Boot applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. To deploy your application to Azure Spring Apps, see [Deploy your first application to Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/quickstart?tabs=Azure-CLI). diff --git a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/java/example/HelloController.java b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/java/example/HelloController.java index 99f289d6e..ea7b0b2da 100644 --- a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/java/example/HelloController.java +++ b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/java/example/HelloController.java @@ -7,8 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +import com.azure.spring.cloud.feature.management.FeatureManager; import com.fasterxml.jackson.core.JsonProcessingException; @RestController @@ -17,9 +19,21 @@ public class HelloController { @Autowired private MessageProperties properties; + @Autowired + private FeatureManager featureManager; + @GetMapping("") public String getMessage() throws JsonProcessingException { return properties.getMessage(); } + @GetMapping("/feature-flag/{name}") + public String getFeatureFlag(@PathVariable String name) { + if (featureManager.isEnabled(name)) { + return "Feature flag '" + name + "' is enabled."; + } else { + return "Feature flag '" + name + "' is disabled."; + } + } + } diff --git a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/bootstrap.properties b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/application.properties similarity index 52% rename from appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/bootstrap.properties rename to appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/application.properties index f34424dc2..30478dc7d 100644 --- a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/bootstrap.properties +++ b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-entraid-sample/src/main/resources/application.properties @@ -1,5 +1,13 @@ +spring.config.import=azureAppConfiguration + spring.cloud.azure.appconfiguration.stores[0].endpoint=${CONFIG_STORE_ENDPOINT} +spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled=true + spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval=5s spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel + +# These will only show when feature flags above are disabled. +feature-management.feature-flags[100].id=gamma +feature-management.feature-flags[100].enabled=true \ No newline at end of file diff --git a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/README.md b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/README.md index f36a93233..404401500 100644 --- a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/README.md +++ b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/README.md @@ -31,6 +31,12 @@ description: This sample demonstrates how to refresh configuration properties fr az appconfig kv set --key /application/config.message --value testKey --name --yes ``` +1. Create the feature flag in your new store: + + ```azurecli + az appconfig feature set --feature alpha --name + ``` + 1. Create monitor trigger. ```azurecli @@ -71,6 +77,28 @@ This value should match the `spring.cloud.azure.appconfiguration.stores[0].monit 1. After a couple seconds refresh again, this time the new value `updatedTestKey` will show. +1. Go to `localhost:8080/feature-flag/alpha` which will display the status of the feature flag. + +1. Update the feature flag in your App Configuration store. + + ```azurecli + az appconfig feature enable --feature alpha --name + ``` + +1. Refresh page, this will trigger the refresh update. + +1. After a couple seconds refresh again, this time the new value `updatedTestKey` will show. + +1. Go to `localhost:8080/feature-flag/alpha` which will display the status of the feature flag. + +1. Update the feature flag in your App Configuration store. + + ```azurecli + az appconfig feature enable --feature alpha --name + ``` + +1. After a couple seconds refresh the page twice, this time the feature flag status will show as enabled. + ## Deploy to Azure Spring Apps Now that you have the Spring Boot application running locally, it's time to move it to production. [Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/overview) makes it easy to deploy Spring Boot applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. To deploy your application to Azure Spring Apps, see [Deploy your first application to Azure Spring Apps](https://learn.microsoft.com/azure/spring-apps/quickstart?tabs=Azure-CLI). diff --git a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/bootstrap.properties b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/application.properties similarity index 54% rename from appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/bootstrap.properties rename to appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/application.properties index 5aba2a639..ec97cf830 100644 --- a/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/bootstrap.properties +++ b/appconfiguration/spring-cloud-azure-starter-appconfiguration-config/spring-cloud-azure-starter-appconfiguration-config-sample/src/main/resources/application.properties @@ -1,6 +1,13 @@ +spring.config.import=azureAppConfiguration + spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING} -spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=,${spring.profiles.active} +spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled=true + spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval=5s spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel + +# These will only show when feature flags above are disabled. +feature-management.feature-flags[100].id=gamma +feature-management.feature-flags[100].enabled=true