From 81a16a4672d291ea5b476175f29725e78e8fae2d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 01:16:08 +0000 Subject: [PATCH 1/3] Initial plan From 6e4a881075cbc05b0938d02129fa68712fe091d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 01:29:15 +0000 Subject: [PATCH 2/3] Fix: Skip App Configuration validation when enabled is false Co-authored-by: rujche <171773178+rujche@users.noreply.github.com> --- .../AzureAppConfigDataLocationResolver.java | 10 +++++- ...zureAppConfigDataLocationResolverTest.java | 35 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java index b4ecd1b477ba..6a0ebe649ad1 100644 --- a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java +++ b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java @@ -57,8 +57,16 @@ public boolean isResolvable(ConfigDataLocationResolverContext context, ConfigDat return false; } + Binder binder = context.getBinder(); + + // Check if Azure App Configuration is enabled + Boolean enabled = binder.bind(AppConfigurationProperties.CONFIG_PREFIX + ".enabled", Boolean.class).orElse(true); + if (!enabled) { + return false; + } + // Check if the configuration properties for Azure App Configuration are present - return hasValidStoreConfiguration(context.getBinder()); + return hasValidStoreConfiguration(binder); } /** diff --git a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java index 04cc61b72850..a3f3655b20c7 100644 --- a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java +++ b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java @@ -47,6 +47,12 @@ class AzureAppConfigDataLocationResolverTest { @Mock BindResult validResult; + @Mock + BindResult enabledTrueResult; + + @Mock + BindResult enabledFalseResult; + private static final String PREFIX = "azureAppConfiguration:"; private static final String INVALID_PREFIX = "someOtherPrefix:"; @@ -80,6 +86,9 @@ void testIsResolvableWithCorrectPrefix() { ConfigDataLocation location = ConfigDataLocation.of(PREFIX); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(validResult); when(validResult.orElse("")).thenReturn("https://test.config.io"); @@ -95,6 +104,9 @@ void testIsResolvableWithValidConnectionStringConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(emptyResult.orElse("")).thenReturn(""); @@ -108,11 +120,28 @@ void testIsResolvableWithValidConnectionStringConfiguration() { assertTrue(result, "Resolver should accept locations with valid connection-string configuration"); } + @Test + void testIsResolvableWhenAppConfigurationIsDisabled() { + ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); + + when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledFalseResult); + when(enabledFalseResult.orElse(true)).thenReturn(false); + + boolean result = resolver.isResolvable(mockContext, location); + + assertFalse(result, "Resolver should reject locations when App Configuration is disabled"); + } + @Test void testIsResolvableWithValidEndpointsConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(emptyResult.orElse("")).thenReturn(""); @@ -134,6 +163,9 @@ void testIsResolvableWithValidConnectionStringsConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].connection-string", String.class)) @@ -156,6 +188,9 @@ void testIsResolvableWithNoValidConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].connection-string", String.class)) From 4226065b291fda875d76c6c4e53ebf917d88440f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 05:25:39 +0000 Subject: [PATCH 3/3] Update CHANGELOG.md with bug fix entry Co-authored-by: rujche <171773178+rujche@users.noreply.github.com> --- sdk/spring/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 3a65e0f34f4d..1efea2c99bfb 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -29,6 +29,7 @@ This section includes changes in `spring-cloud-azure-appconfiguration-config` mo #### Bugs Fixed - Fixed bug where `spring.cloud.azure.appconfiguration.enabled=false` was ignored in the new major version. [#47029](https://github.com/Azure/azure-sdk-for-java/pull/47029) +- Fixed bug where connection string validation occurred even when `spring.cloud.azure.appconfiguration.enabled` is `false`. ### Azure Spring Data Cosmos This section includes changes in `azure-spring-data-cosmos` module.