diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
index 01ff170891f1b..7d6b19e103111 100755
--- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
+++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
@@ -2277,9 +2277,6 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/jacoco-test-coverage/pom.xml b/eng/jacoco-test-coverage/pom.xml
index e76556caadd7a..9272d6f0b99a8 100644
--- a/eng/jacoco-test-coverage/pom.xml
+++ b/eng/jacoco-test-coverage/pom.xml
@@ -409,8 +409,8 @@
com.azure.spring
- azure-identity-spring
- 1.7.0-beta.1
+ azure-spring-boot-core
+ 1.0.0-beta.1
com.azure.spring
diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt
index 88d4e68fad25c..22dd2d7cac3a1 100644
--- a/eng/versioning/version_client.txt
+++ b/eng/versioning/version_client.txt
@@ -142,7 +142,7 @@ com.azure.spring:azure-spring-cloud-appconfiguration-config;2.0.0-beta.2;2.0.0-b
com.azure.spring:azure-spring-cloud-feature-management-web;2.0.0;2.1.0-beta.1
com.azure.spring:azure-spring-cloud-feature-management;2.0.0;2.1.0-beta.1
com.azure.spring:azure-spring-cloud-starter-appconfiguration-config;2.0.0-beta.2;2.0.0-beta.3
-com.azure.spring:azure-identity-spring;1.6.0;1.7.0-beta.1
+com.azure.spring:azure-spring-boot-core;1.0.0-beta.1;1.0.0-beta.1
com.azure.spring:azure-spring-boot-bom;3.6.0;3.7.0-beta.1
com.azure.spring:azure-spring-boot-starter-active-directory-b2c;3.6.0;3.7.0-beta.1
com.azure.spring:azure-spring-boot-starter-active-directory;3.6.0;3.7.0-beta.1
diff --git a/sdk/boms/azure-spring-cloud-dependencies/pom.xml b/sdk/boms/azure-spring-cloud-dependencies/pom.xml
index 9ac0c3d550009..e4f07792ea2a8 100644
--- a/sdk/boms/azure-spring-cloud-dependencies/pom.xml
+++ b/sdk/boms/azure-spring-cloud-dependencies/pom.xml
@@ -52,7 +52,12 @@
2.6.0
1.3.0
${project.version}
- 1.6.0
+ 1.0.0
+ 1.3.0
+ 1.17.0
+ 5.8.0
+ 1.8.0
+ 3.6.1
12.10.0
@@ -178,8 +183,8 @@
com.azure.spring
- azure-identity-spring
- ${azure.spring.identity.version}
+ azure-spring-boot-core
+ ${azure.spring.core.version}
diff --git a/sdk/spring/azure-identity-spring/CHANGELOG.md b/sdk/spring/azure-identity-spring/CHANGELOG.md
deleted file mode 100644
index 5cdfcadb35d5b..0000000000000
--- a/sdk/spring/azure-identity-spring/CHANGELOG.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Release History
-
-## 1.7.0-beta.1 (Unreleased)
-
-
-## 1.6.0 (2021-06-23)
-### New Features
-- Upgrade to [spring-boot-dependencies:2.5.0](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.0/spring-boot-dependencies-2.5.0.pom).
-
-## 1.5.0 (2021-05-24)
-### New Features
-- Upgrade to [spring-boot-dependencies:2.4.5](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.4.5/spring-boot-dependencies-2.4.5.pom).
-- Upgrade to [spring-cloud-dependencies:2020.0.2](https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-dependencies/2020.0.2/spring-cloud-dependencies-2020.0.2.pom).
-
-
-
-## 1.4.0 (2021-04-19)
-
-
-## 1.3.0 (2021-03-22)
-### New Features
-- Upgrade to `Spring Boot` [2.4.3](https://github.com/spring-projects/spring-boot/releases/tag/v2.4.3).
-
-## 1.2.0 (2021-03-03)
-
-
-## 1.1.0 (2021-01-20)
-
-
-## 1.0.0 (2020-12-30)
-### New Features
-- Add Spring identity builder.
diff --git a/sdk/spring/azure-spring-boot-core/CHANGELOG.md b/sdk/spring/azure-spring-boot-core/CHANGELOG.md
new file mode 100644
index 0000000000000..6ced156fc49df
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-core/CHANGELOG.md
@@ -0,0 +1,3 @@
+# Release History
+
+## 1.0.0-beta.1 (Unreleased)
\ No newline at end of file
diff --git a/sdk/spring/azure-identity-spring/README.md b/sdk/spring/azure-spring-boot-core/README.md
similarity index 86%
rename from sdk/spring/azure-identity-spring/README.md
rename to sdk/spring/azure-spring-boot-core/README.md
index 3f2cf94d19757..efa43f9ff6743 100644
--- a/sdk/spring/azure-identity-spring/README.md
+++ b/sdk/spring/azure-spring-boot-core/README.md
@@ -1,6 +1,4 @@
-# Azure Identity Spring Integration client library for Java
-
-[Source code][src]
+# Azure Spring Boot Core client library for Java
## Getting started
@@ -23,5 +21,4 @@ To suggest a new feature or changes that could be made, file an issue the same w
You can participate community driven [![Gitter](https://badges.gitter.im/Microsoft/spring-on-azure.svg)](https://gitter.im/Microsoft/spring-on-azure)
-[src]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/azure-identity-spring/src
[environment_checklist]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/ENVIRONMENT_CHECKLIST.md#ready-to-run-checklist
diff --git a/sdk/spring/azure-identity-spring/pom.xml b/sdk/spring/azure-spring-boot-core/pom.xml
similarity index 75%
rename from sdk/spring/azure-identity-spring/pom.xml
rename to sdk/spring/azure-spring-boot-core/pom.xml
index db6babdd25213..4f3dda5ea637d 100644
--- a/sdk/spring/azure-identity-spring/pom.xml
+++ b/sdk/spring/azure-spring-boot-core/pom.xml
@@ -11,21 +11,20 @@
com.azure.spring
- azure-identity-spring
- 1.7.0-beta.1
+ azure-spring-boot-core
+ 1.0.0-beta.1
jar
- Azure Identity Spring Integration Library
- Azure Identity Spring Integration Library
+ Azure Spring Boot Core Library
+ Azure Spring Boot Core Library
https://github.com/Azure/azure-sdk-for-java
+
+ 0.10
+ 0.10
+
+
-
- org.springframework.boot
- spring-boot
- 2.5.2
- provided
-
org.springframework
spring-context
@@ -40,6 +39,7 @@
com.azure
azure-identity
1.3.3
+ compile
@@ -69,6 +69,18 @@
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.1.2
+
+
+
+ true
+
+
+
+
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/ApplicationId.java
similarity index 72%
rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/ApplicationId.java
index 901cae722bcb6..9f220ab05db03 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/ApplicationId.java
@@ -1,12 +1,12 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-package com.azure.spring.utils;
+package com.azure.spring.core;
import java.util.Optional;
/**
- * Util class for ApplicationId
+ * Util class for ApplicationId perfix
*/
public class ApplicationId {
// There is 24 char limitation about the app id. So some abbreviation needs to be applied:
@@ -15,23 +15,18 @@ public class ApplicationId {
// sc: for Spring Cloud
// sd: for Spring Data
// ss: for Spring Streams
+ // si: for Spring Integration
// kv: for Key Vault
// sb: for Storage Blobs
// sf: for Storage Files
+ // sq: for Storage Queue
// eh: for Event Hub
// bus: for Service Bus
// cfg: for App Config
// cos: for Cosmos
// aad: for AAD
// b2c: for AAD B2C
- public static final String VERSION = Optional.of(ApplicationId.class)
- .map(Class::getPackage)
- .map(Package::getImplementationVersion)
- .orElse("unknown");
- public static final String AZURE_SPRING_KEY_VAULT = "az-sp-kv/" + VERSION;
- public static final String AZURE_SPRING_SERVICE_BUS = "az-sp-bus/" + VERSION;
- public static final String AZURE_SPRING_STORAGE_BLOB = "az-sp-sb/" + VERSION;
- public static final String AZURE_SPRING_STORAGE_FILES = "az-sp-sf/" + VERSION;
+
/**
* AZURE_SPRING_AAD does not contain VERSION, because AAD server support 2 headers:
* 1. x-client-SKU;
@@ -39,5 +34,16 @@ public class ApplicationId {
*/
public static final String AZURE_SPRING_AAD = "az-sp-aad";
public static final String AZURE_SPRING_B2C = "az-sp-b2c";
+ public static final String AZURE_SPRING_EVENT_HUB = "az-sc-eh/;";
+ public static final String AZURE_SPRING_KEY_VAULT = "az-sp-kv/";
+ public static final String AZURE_SPRING_SERVICE_BUS = "az-sp-bus/";
+ public static final String AZURE_SPRING_STORAGE_BLOB = "az-sp-sb/";
+ public static final String AZURE_SPRING_STORAGE_FILES = "az-sp-sf/";
+ public static final String AZURE_SPRING_STORAGE_QUEUE = "az-si-sq/";
+ //TODO: version should contains each starter library's version
+ public static final String VERSION = Optional.of(ApplicationId.class)
+ .map(Class::getPackage)
+ .map(Package::getImplementationVersion)
+ .orElse("unknown");
}
diff --git a/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/AzureEnvironment.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/AzureEnvironment.java
new file mode 100644
index 0000000000000..0de48811e1096
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/AzureEnvironment.java
@@ -0,0 +1,398 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+package com.azure.spring.core.env;
+
+import com.azure.identity.AzureAuthorityHosts;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An instance of this class describes an environment in Azure.
+ */
+public final class AzureEnvironment {
+
+ public static final String KEY_VAULT_DNS_SUFFIX = "keyVaultDnsSuffix";
+ public static final String STORAGE_ENDPOINT_SUFFIX = "storageEndpointSuffix";
+ public static final String AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX = "azureDataLakeStoreFileSystemEndpointSuffix";
+ public static final String AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX = "azureDataLakeAnalyticsCatalogAndJobEndpointSuffix";
+ public static final String PUBLISHING_PROFILE_URL = "publishingProfileUrl";
+ public static final String MANAGEMENT_ENDPOINT_URL = "managementEndpointUrl";
+ public static final String RESOURCE_MANAGER_ENDPOINT_URL = "resourceManagerEndpointUrl";
+ public static final String SQL_MANAGEMENT_ENDPOINT_URL = "sqlManagementEndpointUrl";
+ public static final String SQL_SERVER_HOSTNAME_SUFFIX = "sqlServerHostnameSuffix";
+ public static final String GALLERY_ENDPOINT_URL = "galleryEndpointUrl";
+ public static final String ACTIVE_DIRECTORY_ENDPOINT_URL = "activeDirectoryEndpointUrl";
+ public static final String ACTIVE_DIRECTORY_RESOURCE_ID = "activeDirectoryResourceId";
+ public static final String ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID = "activeDirectoryGraphResourceId";
+ public static final String MICROSOFT_GRAPH_RESOURCE_ID = "microsoftGraphResourceId";
+ public static final String DATA_LAKE_ENDPOINT_RESOURCE_ID = "dataLakeEndpointResourceId";
+ public static final String ACTIVE_DIRECTORY_GRAPH_API_VERSION = "activeDirectoryGraphApiVersion";
+ public static final String AZURE_LOG_ANALYTICS_RESOURCE_ID = "azureLogAnalyticsResourceId";
+ public static final String AZURE_APPLICATION_INSIGHTS_RESOURCE_ID = "azureApplicationInsightsResourceId";
+ public static final String PORTAL_URL = "portalUrl";
+
+ /**
+ * the map of all endpoints.
+ */
+ private final Map endpoints;
+
+ /**
+ * Initializes an instance of AzureEnvironment class.
+ *
+ * @param endpoints a map storing all the endpoint info
+ */
+ public AzureEnvironment(Map endpoints) {
+ this.endpoints = endpoints;
+ }
+
+ /**
+ * Provides the settings for authentication with Azure.
+ */
+ public static final AzureEnvironment AZURE = new AzureEnvironment(new HashMap() {
+ {
+ put(PORTAL_URL, "http://go.microsoft.com/fwlink/?LinkId=254433");
+ put(PUBLISHING_PROFILE_URL, "http://go.microsoft.com/fwlink/?LinkId=254432");
+ put(MANAGEMENT_ENDPOINT_URL, "https://management.core.windows.net/");
+ put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.azure.com/");
+ put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.windows.net:8443/");
+ put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.windows.net");
+ put(GALLERY_ENDPOINT_URL, "https://gallery.azure.com/");
+ put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.com/");
+ put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.windows.net/");
+ put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.windows.net/");
+ put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.com/");
+ put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "https://datalake.azure.net/");
+ put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05");
+ put(STORAGE_ENDPOINT_SUFFIX, ".core.windows.net");
+ put(KEY_VAULT_DNS_SUFFIX, ".vault.azure.net");
+ put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "azuredatalakestore.net");
+ put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "azuredatalakeanalytics.net");
+ put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "https://api.loganalytics.io/");
+ put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "https://api.applicationinsights.io/");
+ }
+ });
+
+ /**
+ * Provides the settings for authentication with Azure China.
+ */
+ public static final AzureEnvironment AZURE_CHINA = new AzureEnvironment(new HashMap() {
+ {
+ put(PORTAL_URL, "http://go.microsoft.com/fwlink/?LinkId=301902");
+ put(PUBLISHING_PROFILE_URL, "http://go.microsoft.com/fwlink/?LinkID=301774");
+ put(MANAGEMENT_ENDPOINT_URL, "https://management.core.chinacloudapi.cn/");
+ put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.chinacloudapi.cn/");
+ put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.chinacloudapi.cn:8443/");
+ put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.chinacloudapi.cn");
+ put(GALLERY_ENDPOINT_URL, "https://gallery.chinacloudapi.cn/");
+ put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.chinacloudapi.cn/");
+ put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.chinacloudapi.cn/");
+ put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.chinacloudapi.cn/");
+ put(MICROSOFT_GRAPH_RESOURCE_ID, "https://microsoftgraph.chinacloudapi.cn/");
+ // TODO: add resource id for the china cloud for datalake once it is defined.
+ put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A");
+ put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05");
+ put(STORAGE_ENDPOINT_SUFFIX, ".core.chinacloudapi.cn");
+ put(KEY_VAULT_DNS_SUFFIX, ".vault.azure.cn");
+ // TODO: add dns suffixes for the china cloud for datalake store and datalake analytics once they are
+ // defined.
+ put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "N/A");
+ put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A");
+
+ }
+ });
+
+ /**
+ * Provides the settings for authentication with Azure US Government.
+ */
+ public static final AzureEnvironment AZURE_US_GOVERNMENT = new AzureEnvironment(new HashMap() {
+ {
+ put(PORTAL_URL, "https://manage.windowsazure.us");
+ put(PUBLISHING_PROFILE_URL, "https://manage.windowsazure.us/publishsettings/index");
+ put(MANAGEMENT_ENDPOINT_URL, "https://management.core.usgovcloudapi.net/");
+ put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.usgovcloudapi.net/");
+ put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.usgovcloudapi.net:8443/");
+ put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.usgovcloudapi.net");
+ put(GALLERY_ENDPOINT_URL, "https://gallery.usgovcloudapi.net/");
+ put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.us/");
+ put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.usgovcloudapi.net/");
+ put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.windows.net/");
+ put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.us/");
+ // TODO: add resource id for the US government for datalake once it is defined.
+ put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A");
+ put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05");
+ put(STORAGE_ENDPOINT_SUFFIX, ".core.usgovcloudapi.net");
+ put(KEY_VAULT_DNS_SUFFIX, ".vault.usgovcloudapi.net");
+ // TODO: add dns suffixes for the US government for datalake store and datalake analytics once they are
+ // defined.
+ put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "https://api.loganalytics.us/");
+ put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A");
+
+ }
+ });
+
+ /**
+ * Provides the settings for authentication with Azure Germany.
+ */
+ public static final AzureEnvironment AZURE_GERMANY = new AzureEnvironment(new HashMap() {
+ {
+ put(PORTAL_URL, "http://portal.microsoftazure.de/");
+ put(PUBLISHING_PROFILE_URL, "https://manage.microsoftazure.de/publishsettings/index");
+ put(MANAGEMENT_ENDPOINT_URL, "https://management.core.cloudapi.de/");
+ put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.microsoftazure.de/");
+ put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.cloudapi.de:8443/");
+ put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.cloudapi.de");
+ put(GALLERY_ENDPOINT_URL, "https://gallery.cloudapi.de/");
+ put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.de/");
+ put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.cloudapi.de/");
+ put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.cloudapi.de/");
+ put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.de/");
+ // TODO: add resource id for the germany cloud for datalake once it is defined.
+ put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A");
+ put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05");
+ put(STORAGE_ENDPOINT_SUFFIX, ".core.cloudapi.de");
+ put(KEY_VAULT_DNS_SUFFIX, ".vault.microsoftazure.de");
+ // TODO: add dns suffixes for the germany cloud for datalake store and datalake analytics once they are
+ // defined.
+ put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A");
+ put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "N/A");
+ put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A");
+
+ }
+ });
+
+ /**
+ * @return the entirety of the endpoints associated with the current environment.
+ */
+ public Map getEndpoints() {
+ return endpoints;
+ }
+
+ /**
+ * @return the list of known environments to Azure SDK.
+ */
+ public static List knownEnvironments() {
+ return Arrays.asList(AZURE, AZURE_CHINA, AZURE_GERMANY, AZURE_US_GOVERNMENT);
+ }
+
+ /**
+ * @return the management portal URL.
+ */
+ public String getPortal() {
+ return endpoints.get(PORTAL_URL);
+ }
+
+ /**
+ * @return the publish settings file URL.
+ */
+ public String getPublishingProfile() {
+ return endpoints.get(PUBLISHING_PROFILE_URL);
+ }
+
+ /**
+ * @return the management service endpoint.
+ */
+ public String getManagementEndpoint() {
+ return endpoints.get(MANAGEMENT_ENDPOINT_URL);
+ }
+
+ /**
+ * @return the resource management endpoint.
+ */
+ public String getResourceManagerEndpoint() {
+ return endpoints.get(RESOURCE_MANAGER_ENDPOINT_URL);
+ }
+
+ /**
+ * @return the sql server management endpoint for mobile commands.
+ */
+ public String getSqlManagementEndpoint() {
+ return endpoints.get(SQL_MANAGEMENT_ENDPOINT_URL);
+ }
+
+ /**
+ * @return The resource ID to obtain AD tokens for.
+ */
+ public String getActiveDirectoryResourceId() {
+ return endpoints.get(ACTIVE_DIRECTORY_RESOURCE_ID);
+ }
+
+ /**
+ * @return the template gallery endpoint.
+ */
+ public String getGalleryEndpoint() {
+ return endpoints.get(GALLERY_ENDPOINT_URL);
+ }
+
+ /**
+ * @return the Active Directory resource ID.
+ */
+ public String getGraphEndpoint() {
+ return endpoints.get(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID);
+ }
+
+ /**
+ * @return the Microsoft Graph resource ID.
+ */
+ public String getMicrosoftGraphEndpoint() {
+ return endpoints.get(MICROSOFT_GRAPH_RESOURCE_ID);
+ }
+
+ /**
+ * @return the Data Lake resource ID.
+ */
+ public String getDataLakeEndpointResourceId() {
+ return endpoints.get(DATA_LAKE_ENDPOINT_RESOURCE_ID);
+ }
+
+ /**
+ * @return the Active Directory api version.
+ */
+ public String getActiveDirectoryGraphApiVersion() {
+ return endpoints.get(ACTIVE_DIRECTORY_GRAPH_API_VERSION);
+ }
+
+ /**
+ * @return the endpoint suffix for storage accounts.
+ */
+ public String getStorageEndpointSuffix() {
+ return endpoints.get(STORAGE_ENDPOINT_SUFFIX);
+ }
+
+ /**
+ * @return the keyvault service dns suffix.
+ */
+ public String getKeyVaultDnsSuffix() {
+ return endpoints.get(KEY_VAULT_DNS_SUFFIX);
+ }
+
+ /**
+ * @return the data lake store filesystem service dns suffix.
+ */
+ public String getAzureDataLakeStoreFileSystemEndpointSuffix() {
+ return endpoints.get(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX);
+ }
+
+ /**
+ * @return the data lake analytics job and catalog service dns suffix.
+ */
+ public String getAzureDataLakeAnalyticsCatalogAndJobEndpointSuffix() {
+ return endpoints.get(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX);
+ }
+
+ /**
+ * @return the log analytics endpoint.
+ */
+ public String getLogAnalyticsEndpoint() {
+ return endpoints.get(AZURE_LOG_ANALYTICS_RESOURCE_ID);
+ }
+
+ /**
+ * @return the log analytics endpoint.
+ */
+ public String getApplicationInsightsEndpoint() {
+ return endpoints.get(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID);
+ }
+
+ public static String toAuthorityHost(String azureEnvironment) {
+ switch (azureEnvironment) {
+ case "AzureChina":
+ return AzureAuthorityHosts.AZURE_CHINA;
+ case "AzureGermany":
+ return AzureAuthorityHosts.AZURE_GERMANY;
+ case "AzureUSGovernment":
+ return AzureAuthorityHosts.AZURE_GOVERNMENT;
+ default:
+ return AzureAuthorityHosts.AZURE_PUBLIC_CLOUD;
+ }
+ }
+
+ /**
+ * The enum representing available endpoints in an environment.
+ */
+ public enum Endpoint {
+ /**
+ * Azure management endpoint.
+ */
+ MANAGEMENT(MANAGEMENT_ENDPOINT_URL),
+ /**
+ * Azure Resource Manager endpoint.
+ */
+ RESOURCE_MANAGER(RESOURCE_MANAGER_ENDPOINT_URL),
+ /**
+ * Azure SQL endpoint.
+ */
+ SQL(SQL_MANAGEMENT_ENDPOINT_URL),
+ /**
+ * Azure Gallery endpoint.
+ */
+ GALLERY(GALLERY_ENDPOINT_URL),
+ /**
+ * Active Directory authentication endpoint.
+ */
+ ACTIVE_DIRECTORY(ACTIVE_DIRECTORY_ENDPOINT_URL),
+ /**
+ * Azure Active Directory Graph APIs endpoint.
+ */
+ GRAPH(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID),
+ /**
+ * Key Vault DNS suffix.
+ */
+ KEYVAULT(KEY_VAULT_DNS_SUFFIX),
+ /**
+ * Azure Data Lake Store DNS suffix.
+ */
+ DATA_LAKE_STORE(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX),
+ /**
+ * Azure Data Lake Analytics DNS suffix.
+ */
+ DATA_LAKE_ANALYTICS(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX),
+ /**
+ * Azure Log Analytics endpoint.
+ */
+ LOG_ANALYTICS(AZURE_LOG_ANALYTICS_RESOURCE_ID),
+ /**
+ * Azure Application Insights.
+ */
+ APPLICATION_INSIGHTS(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID),
+ /**
+ * Microsoft Graph APIs endpoint.
+ */
+ MICROSOFT_GRAPH(MICROSOFT_GRAPH_RESOURCE_ID);
+
+ private final String field;
+
+ Endpoint(String value) {
+ this.field = value;
+ }
+
+ /**
+ * @return a unique identifier for the endpoint in the environment
+ */
+ public String identifier() {
+ return field;
+ }
+
+ @Override
+ public String toString() {
+ return field;
+ }
+ }
+
+ /**
+ * Gets the endpoint URL for the current environment.
+ *
+ * @param endpoint the endpoint.
+ * @return the URL for the endpoint, null if no match.
+ */
+ public String getUrlByEndpoint(Endpoint endpoint) {
+ return endpoints.get(endpoint.identifier());
+ }
+}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/package-info.java
similarity index 50%
rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/package-info.java
index c2b23b4ad5538..604c4afcb8b1d 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/env/package-info.java
@@ -2,6 +2,6 @@
// Licensed under the MIT License.
/**
- * Package com.azure.spring.cloud.context.core.util;
+ * Package com.azure.spring.core.env;
*/
-package com.azure.spring.cloud.context.core.util;
+package com.azure.spring.core.env;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/package-info.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/package-info.java
similarity index 61%
rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/package-info.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/package-info.java
index eaa2719ffd21d..be239a2b1e729 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/package-info.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/package-info.java
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+
/**
- * Package com.azure.spring.utils
+ * Package com.azure.spring.core;
*/
-package com.azure.spring.utils;
+package com.azure.spring.core;
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Memoizer.java
similarity index 95%
rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Memoizer.java
index 9fcdc9ef9009f..c47e8518d7450 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Memoizer.java
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-package com.azure.spring.cloud.context.core.util;
+package com.azure.spring.core.util;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Tuple.java
similarity index 95%
rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Tuple.java
index b64d6a01343a2..157dbd8cd4529 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/Tuple.java
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-package com.azure.spring.cloud.context.core.util;
+package com.azure.spring.core.util;
import java.util.Objects;
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/TypeMap.java
similarity index 91%
rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/TypeMap.java
index a887206013491..dd280d9dca061 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/TypeMap.java
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-package com.azure.spring.cloud.context.core.util;
+package com.azure.spring.core.util;
import java.util.HashMap;
import java.util.Map;
diff --git a/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/package-info.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/package-info.java
new file mode 100644
index 0000000000000..2174fe25415f6
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/core/util/package-info.java
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+/**
+ * Package com.azure.spring.core.util;
+ */
+package com.azure.spring.core.util;
diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java
similarity index 100%
rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java
diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java
similarity index 100%
rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java
diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java
similarity index 61%
rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java
index 8aba8c4093e38..275bbd7955cde 100644
--- a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java
@@ -3,13 +3,17 @@
package com.azure.spring.identity;
import com.azure.core.credential.TokenCredential;
+import com.azure.identity.AzureAuthorityHosts;
import com.azure.identity.ClientCertificateCredentialBuilder;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
-import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;
+import java.util.Optional;
+
+import static com.azure.spring.core.env.AzureEnvironment.toAuthorityHost;
+
/**
*
*/
@@ -36,25 +40,28 @@ protected TokenCredential populateTokenCredentialBasedOnClientId(String prefix)
}
private TokenCredential populateTokenCredential(String prefix, boolean createDefault) {
- String tenantId = getPropertyValue(prefix, "tenant-id");
- String clientId = getPropertyValue(prefix, "client-id");
- String clientSecret = getPropertyValue(prefix, "client-secret");
+ String tenantId = getPropertyValue(prefix + "tenant-id");
+ String clientId = getPropertyValue(prefix + "client-id");
+ String clientSecret = getPropertyValue(prefix + "client-secret");
+ String authorityHost = getAuthorityHost(prefix);
if (tenantId != null && clientId != null && clientSecret != null) {
return new ClientSecretCredentialBuilder()
.tenantId(tenantId)
.clientId(clientId)
.clientSecret(clientSecret)
+ .authorityHost(authorityHost)
.build();
}
- String certPath = getPropertyValue(prefix, "client-certificate-path");
+ String certPath = getPropertyValue(prefix + "client-certificate-path");
if (tenantId != null && clientId != null && certPath != null) {
return new ClientCertificateCredentialBuilder()
.tenantId(tenantId)
.clientId(clientId)
.pemCertificate(certPath)
+ .authorityHost(authorityHost)
.build();
}
@@ -69,10 +76,20 @@ protected ManagedIdentityCredential defaultManagedIdentityCredential() {
return new ManagedIdentityCredentialBuilder().build();
}
- protected String getPropertyValue(String prefix, String propertyKey) {
- return Binder.get(this.environment)
- .bind(prefix + propertyKey, String.class)
- .orElse(null);
+ protected String getPropertyValue(String propertyName) {
+ return environment.getProperty(propertyName);
+ }
+
+ protected String getPropertyValue(String propertyName, String defaultValue) {
+ return environment.getProperty(propertyName, defaultValue);
+ }
+
+ protected String getAuthorityHost(String prefix) {
+ return Optional.ofNullable(getPropertyValue(prefix + "authority-host"))
+ .orElse(Optional.ofNullable(getPropertyValue(prefix + "environment"))
+ .filter(env -> !env.isEmpty())
+ .map(env -> toAuthorityHost(env))
+ .orElse(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD));
}
}
diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/package-info.java
similarity index 78%
rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java
rename to sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/package-info.java
index 391ffff04977d..4de576fa1a58e 100644
--- a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java
+++ b/sdk/spring/azure-spring-boot-core/src/main/java/com/azure/spring/identity/package-info.java
@@ -2,6 +2,6 @@
// Licensed under the MIT License.
/**
- * Package com.azure.identity.spring;
+ * Package com.azure.spring.identity;
*/
package com.azure.spring.identity;
diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java b/sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java
similarity index 100%
rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java
rename to sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java
diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java b/sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java
similarity index 100%
rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java
rename to sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java
diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java b/sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java
similarity index 65%
rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java
rename to sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java
index ab466e261ca0d..b1a3d13903f63 100644
--- a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java
+++ b/sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java
@@ -3,6 +3,7 @@
package com.azure.spring.identity;
import com.azure.core.credential.TokenCredential;
+import com.azure.identity.AzureAuthorityHosts;
import com.azure.identity.ClientCertificateCredential;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ManagedIdentityCredential;
@@ -23,19 +24,54 @@ public void testPropertyBinder() {
final Properties properties = new PropertiesBuilder()
.prefix(prefix)
- .property("clientId", "fake-client-id") // camel case
+ //TODO: make getPropertyValue compatible with relax binding
.property("client-secret", "fake-secret") // kebab case
- .property("tenant_id", "fake-tenant-id") // underscore notation
- .property("CLIENT_CERTIFICATE_PATH", "fake-cert-path")// upper case format
+// .property("clientId", "fake-client-id") // camel case
+// .property("tenant_id", "fake-tenant-id") // underscore notation
+// .property("CLIENT_CERTIFICATE_PATH", "fake-cert-path")// upper case format
.build();
final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder()
.environment(buildEnvironment(properties));
- assertEquals("fake-client-id", builder.getPropertyValue(prefix, "client-id"));
- assertEquals("fake-secret", builder.getPropertyValue(prefix, "client-secret"));
- assertEquals("fake-tenant-id", builder.getPropertyValue(prefix, "tenant-id"));
- assertEquals("fake-cert-path", builder.getPropertyValue(prefix, "client-certificate-path"));
+ assertEquals("fake-secret", builder.getPropertyValue(prefix + "client-secret"));
+// assertEquals("fake-client-id", builder.getPropertyValue(prefix + "client-id"));
+// assertEquals("fake-tenant-id", builder.getPropertyValue(prefix + "tenant-id"));
+// assertEquals("fake-cert-path", builder.getPropertyValue(prefix + "client-certificate-path"));
+ assertEquals(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD, builder.getAuthorityHost(prefix));
+ }
+
+ @Test
+ public void testGetAuthorityHost() {
+
+ final String prefix = "azure.activedirectory.";
+
+ final Properties properties = new PropertiesBuilder()
+ .prefix(prefix)
+ .property("authority-host", "fake-authority-host")
+ .property("environment", "AzureChina")
+ .build();
+
+ final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder()
+ .environment(buildEnvironment(properties));
+
+ assertEquals("fake-authority-host", builder.getAuthorityHost(prefix));
+ }
+
+ @Test
+ public void testGetAuthorityHostFromEnvironment() {
+
+ final String prefix = "azure.activedirectory.";
+
+ final Properties properties = new PropertiesBuilder()
+ .prefix(prefix)
+ .property("environment", "AzureChina")
+ .build();
+
+ final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder()
+ .environment(buildEnvironment(properties));
+
+ assertEquals(AzureAuthorityHosts.AZURE_CHINA, builder.getAuthorityHost(prefix));
}
@Test
diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java b/sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java
similarity index 100%
rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java
rename to sdk/spring/azure-spring-boot-core/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java
diff --git a/sdk/spring/azure-spring-boot-starter-keyvault-secrets/CHANGELOG.md b/sdk/spring/azure-spring-boot-starter-keyvault-secrets/CHANGELOG.md
index d26e990046df1..8d0b36a8217a2 100644
--- a/sdk/spring/azure-spring-boot-starter-keyvault-secrets/CHANGELOG.md
+++ b/sdk/spring/azure-spring-boot-starter-keyvault-secrets/CHANGELOG.md
@@ -2,7 +2,6 @@
## 3.7.0-beta.1 (Unreleased)
-
## 3.6.0 (2021-06-23)
### Breaking Changes
diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java
index b6b13d5078b29..45fdce1781549 100644
--- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java
+++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java
@@ -3,7 +3,7 @@
package com.azure.spring.utils.test;
-import com.azure.spring.utils.ApplicationId;
+import com.azure.spring.core.ApplicationId;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -16,7 +16,7 @@ public class ApplicationIdTest {
so there are some requirements to run this test:
1. This test can not put in azure-spring-boot module.
If put in azure-spring-boot module, azure-spring-boot-xxx.jar/META-INF/MANIFEST.MF can not be used.
- 2. This test can not put in the same package with ApplicationId: "com.azure.spring.utils".
+ 2. This test can not put in the same package with ApplicationId: "com.azure.spring.core".
If put in that package, then ApplicationId.class.getPackage().getImplementationVersion() will return null.
3. This test can not run in Intellij with default configuration.
In Intellij, the default dependency type is "module", not "external library".
diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java
index 0378095a86700..db58017adcda2 100644
--- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java
+++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java
@@ -1,6 +1,5 @@
package com.azure.test.aad.selenium;
-import com.azure.spring.utils.AzureCloudUrls;
import com.azure.test.aad.common.SeleniumITHelper;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
@@ -33,8 +32,8 @@ public static Map createDefaultProperties() {
defaultProperties.put("azure.activedirectory.client-secret", AAD_SINGLE_TENANT_CLIENT_SECRET);
defaultProperties.put("azure.activedirectory.user-group.allowed-groups", "group1");
defaultProperties.put("azure.activedirectory.post-logout-redirect-uri", "http://localhost:${server.port}");
- defaultProperties.put("azure.activedirectory.base-uri", AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE));
- defaultProperties.put("azure.activedirectory.graph-base-uri", AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE));
+ defaultProperties.put("azure.activedirectory.base-uri", getBaseUrl(AZURE_CLOUD_TYPE));
+ defaultProperties.put("azure.activedirectory.graph-base-uri", getGraphBaseUrl(AZURE_CLOUD_TYPE));
return defaultProperties;
}
@@ -97,7 +96,7 @@ public String logoutAndGetLogoutUsername() {
public String httpGetWithIncrementalConsent(String endpoint) {
driver.get((app.root() + endpoint));
- String oauth2AuthorizationUrlFraction = String.format(AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE)
+ String oauth2AuthorizationUrlFraction = String.format(getBaseUrl(AZURE_CLOUD_TYPE)
+ "%s/oauth2/v2.0/" + "authorize?", AAD_TENANT_ID_1);
wait.until(ExpectedConditions.urlContains(oauth2AuthorizationUrlFraction));
@@ -109,4 +108,19 @@ public String httpGetWithIncrementalConsent(String endpoint) {
public String getUsername() {
return username;
}
+
+ public static String getBaseUrl(String cloudType) {
+ return cloudType.equals("Global") ? "https://login.microsoftonline.com/"
+ : "https://login.partner.microsoftonline.cn/";
+ }
+
+ public static String getGraphBaseUrl(String cloudType) {
+ return cloudType.equals("Global") ? "https://graph.microsoft.com/"
+ : "https://microsoftgraph.chinacloudapi.cn/";
+ }
+
+ public static String getServiceManagementBaseUrl(String cloudType) {
+ return cloudType.equals("Global") ? "https://management.azure.com/"
+ : "https://management.chinacloudapi.cn/";
+ }
}
diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java
index 9a535a082456c..b4836c5ec0d51 100644
--- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java
+++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java
@@ -3,7 +3,6 @@
package com.azure.test.aad.selenium.oauth2client.issuedat;
-import com.azure.spring.utils.AzureCloudUrls;
import com.azure.test.aad.selenium.AADSeleniumITHelper;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
@@ -33,11 +32,11 @@ public class AADOauth2AuthorizedClientCachedIT {
public void testOauth2AuthorizedClientCached() {
Map properties = createDefaultProperties();
- String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
+ String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
String armClientScope = armClientUrl + "user_impersonation";
properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope);
- String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE);
+ String graphBaseUrl = AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE);
properties.put("azure.activedirectory.authorization-clients.graph.scopes",
graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All");
aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties);
diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java
index 3eb5fac7c6a5b..79919e8b632d8 100644
--- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java
+++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java
@@ -3,7 +3,6 @@
package com.azure.test.aad.selenium.oauth2client.scopes;
-import com.azure.spring.utils.AzureCloudUrls;
import com.azure.test.aad.selenium.AADSeleniumITHelper;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
@@ -32,10 +31,10 @@ public class AADAccessTokenScopesIT {
@Test
public void testAccessTokenScopes() {
Map properties = createDefaultProperties();
- String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
+ String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
String armClientScope = armClientUrl + "user_impersonation";
properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope);
- String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE);
+ String graphBaseUrl = AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE);
properties.put("azure.activedirectory.authorization-clients.graph.scopes",
graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All");
diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java
index 243bc2f877a20..7a8dd32da6c7b 100644
--- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java
+++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java
@@ -3,7 +3,6 @@
package com.azure.test.aad.selenium.ondemand;
-import com.azure.spring.utils.AzureCloudUrls;
import com.azure.test.aad.selenium.AADSeleniumITHelper;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
@@ -33,7 +32,7 @@ public class AADOnDemandIT {
@Test
public void onDemandTest() {
- String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
+ String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE);
String armClientScope = armClientUrl + "user_impersonation";
Map properties = createDefaultProperties();
properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope);
diff --git a/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties b/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties
index 1a875edb98cb0..3ca1a4b8724e1 100644
--- a/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties
+++ b/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties
@@ -1,10 +1,10 @@
# Specify if Key Vault should be used to retrieve secrets.
-azure.keyvault.enabled=true
+spring.cloud.azure.keyvault.enabled=true
# Specify the URI of your Key Vault (e.g.: https://name.vault.azure.net/).
-#azure.keyvault.uri=put-your-key-vault-uri-here
+#spring.cloud.azure.keyvault.uri=put-your-key-vault-uri-here
# Specify the Service Principal Client ID with access to your Key Vault.
-#azure.keyvault.client-id=put-your-azure-client-id-here
-#azure.keyvault.client-key=put-your-azure-client-key-here
+#spring.cloud.azure.keyvault.credential.client-id=put-your-azure-client-id-here
+#spring.cloud.azure.keyvault.credential.client-key=put-your-azure-client-key-here
# Specify the Service Principal Client Secret.
diff --git a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java
index e17f80f515327..d1ce4a0fbeb90 100644
--- a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java
+++ b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java
@@ -19,10 +19,10 @@ public class CosmosActuatorIT {
public void testCosmosSpringBootActuatorHealth() {
try (AppRunner app = new AppRunner(DummyApp.class)) {
//set properties
- app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
- app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
- app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
- app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true));
+ app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
+ app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
+ app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
+ app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true));
app.property("management.endpoint.health.show-details", "always");
app.property("management.health.azure-cosmos.enabled", "true");
diff --git a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java
index 1f1eada24a57f..2705f41aa3b03 100644
--- a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java
+++ b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java
@@ -30,10 +30,10 @@ public class CosmosIT {
public void testCosmosStarterIsolating() {
try (AppRunner app = new AppRunner(DummyApp.class)) {
//set properties
- app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
- app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
- app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
- app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true));
+ app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
+ app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
+ app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
+ app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true));
//start app
app.start();
@@ -46,10 +46,10 @@ public void testCosmosStarterIsolating() {
public void testCosmosOperation() {
try (AppRunner app = new AppRunner(DummyApp.class)) {
//set properties
- app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
- app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
- app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
- app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true));
+ app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT);
+ app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY);
+ app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME);
+ app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true));
//start app
app.start();
diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java
index 7c92abfb6f984..c56e84d4c13e2 100644
--- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java
+++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java
@@ -28,11 +28,11 @@ public class KeyVaultActuatorIT {
public void testSpringBootActuatorHealth() {
LOGGER.info("testSpringBootActuatorHealth begin.");
try (AppRunner app = new AppRunner(DummyApp.class)) {
- app.property("azure.keyvault.enabled", "true");
- app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault.client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.enabled", "true");
+ app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID);
app.property("management.endpoint.health.show-details", "always");
app.property("management.endpoints.web.exposure.include", "*");
app.property("management.health.azure-key-vault.enabled", "true");
@@ -53,11 +53,11 @@ public void testSpringBootActuatorHealth() {
public void testSpringBootActuatorEnv() {
LOGGER.info("testSpringBootActuatorEnv begin.");
try (AppRunner app = new AppRunner(DummyApp.class)) {
- app.property("azure.keyvault.enabled", "true");
- app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault.client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.enabled", "true");
+ app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID);
app.property("management.endpoint.health.show-details", "always");
app.property("management.endpoints.web.exposure.include", "*");
app.property("management.health.azure-key-vault.enabled", "true");
diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java
index bcaa3ba2da078..23b3a88e33847 100644
--- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java
+++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java
@@ -75,11 +75,11 @@ private static TokenCredential credentials() {
public void keyVaultAsPropertySource() {
LOGGER.info("keyVaultAsPropertySource begin.");
try (AppRunner app = new AppRunner(DummyApp.class)) {
- app.property("azure.keyvault.enabled", "true");
- app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault.client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.enabled", "true");
+ app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID);
LOGGER.info("app begin to start.");
final ConfigurableApplicationContext dummy = app.start();
@@ -98,12 +98,12 @@ public void keyVaultAsPropertySource() {
public void keyVaultAsPropertySourceWithSpecificKeys() {
LOGGER.info("keyVaultAsPropertySourceWithSpecificKeys begin.");
try (AppRunner app = new AppRunner(DummyApp.class)) {
- app.property("azure.keyvault.enabled", "true");
- app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault.client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID);
- app.property("azure.keyvault.secret-keys", KEY_VAULT_SECRET_NAME);
+ app.property("spring.cloud.azure.keyvault.enabled", "true");
+ app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.secret-keys", KEY_VAULT_SECRET_NAME);
LOGGER.info("====" + KEY_VAULT_SECRET_NAME);
app.start();
assertEquals(KEY_VAULT_SECRET_VALUE, app.getProperty(KEY_VAULT_SECRET_NAME));
diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java
index 215d4060e5e5f..d79d5e21179b9 100644
--- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java
+++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java
@@ -37,12 +37,12 @@ private static String getKeyVaultName(String keyVaultUri) {
@Test
public void testGetValueFromKeyVault1() {
try (AppRunner app = new AppRunner(TestApp.class)) {
- app.property("azure.keyvault.order", KEY_VAULT_NAME_1);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.order", KEY_VAULT_NAME_1);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID);
app.start();
assertEquals(KEY_VAULT1_SECRET_VALUE, app.getProperty(KEY_VAULT1_SECRET_NAME));
}
@@ -54,12 +54,12 @@ public void testGetValueFromKeyVault1() {
@Test
public void testGetValueFromKeyVault2() {
try (AppRunner app = new AppRunner(TestApp.class)) {
- app.property("azure.keyvault.order", KEY_VAULT_NAME_2);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.order", KEY_VAULT_NAME_2);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID);
app.start();
assertEquals(KEY_VAULT2_SECRET_VALUE, app.getProperty(KEY_VAULT2_SECRET_NAME));
}
@@ -72,17 +72,17 @@ public void testGetValueFromKeyVault2() {
@Test
public void testGetValueForDuplicateKey() {
try (AppRunner app = new AppRunner(TestApp.class)) {
- app.property("azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2));
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2));
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID);
app.start();
assertEquals(KEY_VAULT1_COMMON_SECRET_VALUE, app.getProperty(KEY_VAULT_COMMON_SECRET_NAME));
}
@@ -94,17 +94,17 @@ public void testGetValueForDuplicateKey() {
@Test
public void testGetValueFromSingleVault() {
try (AppRunner app = new AppRunner(TestApp.class)) {
- app.property("azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2));
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET);
- app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2));
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true");
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET);
+ app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID);
app.start();
assertEquals(KEY_VAULT1_SECRET_VALUE, app.getProperty(KEY_VAULT1_SECRET_NAME));
assertEquals(KEY_VAULT2_SECRET_VALUE, app.getProperty(KEY_VAULT2_SECRET_NAME));
diff --git a/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json b/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json
index fbd9757de7da9..31c4daaf381a7 100644
--- a/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json
+++ b/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json
@@ -86,7 +86,7 @@
"siteConfig": {
"appSettings": [
{
- "name": "AZURE_KEYVAULT_URI",
+ "name": "SPRING_CLOUD_AZURE_KEYVAULT_URI",
"value": "[variables('azureKeyVaultUri')]"
}
],
diff --git a/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java b/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java
index 9fcc304c1aff3..7e566aac9f47b 100644
--- a/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java
+++ b/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java
@@ -22,9 +22,9 @@ public class StorageActuatorIT {
public void testBlobStorageActuatorHealth() {
try (AppRunner app = new AppRunner(DummyApp.class)) {
//set properties
- app.property("azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME);
- app.property("azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY);
- app.property("azure.storage.blob-endpoint", AZURE_STORAGE_BLOB_ENDPOINT);
+ app.property("spring.cloud.azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME);
+ app.property("spring.cloud.azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY);
+ app.property("spring.cloud.azure.storage.blob-endpoint", AZURE_STORAGE_BLOB_ENDPOINT);
app.property("blob", AZURE_STORAGE_BLOB);
app.property("management.endpoint.health.show-details", "always");
app.property("management.endpoints.web.exposure.include", "*");
@@ -49,9 +49,9 @@ public void testBlobStorageActuatorHealth() {
public void testFileStorageActuatorHealth() {
try (AppRunner app = new AppRunner(DummyApp.class)) {
//set properties
- app.property("azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME);
- app.property("azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY);
- app.property("azure.storage.file-endpoint", AZURE_STORAGE_FILE_ENDPOINT);
+ app.property("spring.cloud.azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME);
+ app.property("spring.cloud.azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY);
+ app.property("spring.cloud.azure.storage.file-endpoint", AZURE_STORAGE_FILE_ENDPOINT);
app.property("file", AZURE_STORAGE_FILE);
app.property("management.endpoint.health.show-details", "always");
//start app
diff --git a/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties b/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties
index 70a9c8b979054..5e29083279fab 100644
--- a/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties
+++ b/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties
@@ -1,6 +1,6 @@
-azure.storage.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
-azure.storage.account-key=${AZURE_STORAGE_ACCOUNT_KEY}
-azure.storage.blob-endpoint=${AZURE_STORAGE_BLOB_ENDPOINT}
-azure.storage.file-endpoint=${AZURE_STORAGE_FILE_ENDPOINT}
+spring.cloud.azure.storage.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
+spring.cloud.azure.storage.account-key=${AZURE_STORAGE_ACCOUNT_KEY}
+spring.cloud.azure.storage.blob-endpoint=${AZURE_STORAGE_BLOB_ENDPOINT}
+spring.cloud.azure.storage.file-endpoint=${AZURE_STORAGE_FILE_ENDPOINT}
blob=${AZURE_STORAGE_BLOB}
file=${AZURE_STORAGE_FILE}
diff --git a/sdk/spring/azure-spring-boot/CHANGELOG.md b/sdk/spring/azure-spring-boot/CHANGELOG.md
index 46cc2fe634e53..bc77a84251aa8 100644
--- a/sdk/spring/azure-spring-boot/CHANGELOG.md
+++ b/sdk/spring/azure-spring-boot/CHANGELOG.md
@@ -2,6 +2,7 @@
## 3.7.0-beta.1 (Unreleased)
+
## 3.6.1 (2021-07-02)
### New Features
- Upgrade to [spring-boot-dependencies:2.5.2](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.2/spring-boot-dependencies-2.5.2.pom).
diff --git a/sdk/spring/azure-spring-boot/pom.xml b/sdk/spring/azure-spring-boot/pom.xml
index 9df688481265f..56045d2ce9e89 100644
--- a/sdk/spring/azure-spring-boot/pom.xml
+++ b/sdk/spring/azure-spring-boot/pom.xml
@@ -168,6 +168,13 @@
true
+
+
+ com.azure.spring
+ azure-spring-boot-core
+ 1.0.0-beta.1
+
+
com.azure
@@ -332,18 +339,6 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.1.2
-
-
-
- true
-
-
-
-
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java
index d14d284bd7227..c93d516c7762f 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java
@@ -3,7 +3,7 @@
package com.azure.spring.aad;
-import com.azure.spring.utils.ApplicationId;
+import com.azure.spring.core.ApplicationId;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.RequestEntity;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java
index 0d773d9b99d58..5278c2f0a8df0 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java
@@ -3,8 +3,8 @@
package com.azure.spring.aad.webapp;
+import com.azure.spring.core.ApplicationId;
import com.azure.spring.aad.AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter;
-import com.azure.spring.utils.ApplicationId;
import org.springframework.http.RequestEntity;
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
import org.springframework.util.LinkedMultiValueMap;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java
index 1a3554ef09b82..1aa02a9d94c62 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java
@@ -29,11 +29,12 @@
* Configuration properties for Azure Active Directory Authentication.
*/
@Validated
-@ConfigurationProperties("azure.activedirectory")
+@ConfigurationProperties(AADAuthenticationProperties.PREFIX)
public class AADAuthenticationProperties implements InitializingBean {
private static final long DEFAULT_JWK_SET_CACHE_LIFESPAN = TimeUnit.MINUTES.toMillis(5);
private static final long DEFAULT_JWK_SET_CACHE_REFRESH_TIME = DEFAULT_JWK_SET_CACHE_LIFESPAN;
+ public static final String PREFIX = "azure.activedirectory";
/**
* Default UserGroup configuration.
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java
index 511593549507e..27089dde1d41d 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java
@@ -4,7 +4,7 @@
package com.azure.spring.autoconfigure.b2c;
import com.azure.spring.aad.AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter;
-import com.azure.spring.utils.ApplicationId;
+import com.azure.spring.core.ApplicationId;
import org.springframework.http.RequestEntity;
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java
index f403bd8607f09..4797b1dce4980 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java
@@ -7,15 +7,19 @@
import com.azure.cosmos.ConnectionMode;
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosClientBuilder;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.spring.data.cosmos.config.AbstractCosmosConfiguration;
import com.azure.spring.data.cosmos.config.CosmosConfig;
import com.azure.spring.data.cosmos.core.CosmosTemplate;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
+
/**
* Auto Configure Cosmos properties and connection policy.
*/
@@ -24,29 +28,33 @@
@ConditionalOnResource(resources = "classpath:cosmos.enable.config")
@EnableConfigurationProperties(CosmosProperties.class)
public class CosmosAutoConfiguration extends AbstractCosmosConfiguration {
- private final CosmosProperties properties;
+ private final CosmosProperties cosmosProperties;
+ private final AzureProperties azureProperties;
+
- public CosmosAutoConfiguration(CosmosProperties properties) {
- this.properties = properties;
+ public CosmosAutoConfiguration(CosmosProperties cosmosProperties,
+ @Qualifier(AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) {
+ this.cosmosProperties = cosmosProperties;
+ this.azureProperties = azureProperties;
}
@Override
protected String getDatabaseName() {
- return properties.getDatabase();
+ return cosmosProperties.getDatabase();
}
@Bean
public AzureKeyCredential azureKeyCredential() {
- return new AzureKeyCredential(properties.getKey());
+ return new AzureKeyCredential(cosmosProperties.getKey());
}
@Bean
public CosmosClientBuilder cosmosClientBuilder(AzureKeyCredential azureKeyCredential) {
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder();
cosmosClientBuilder.credential(azureKeyCredential)
- .consistencyLevel(properties.getConsistencyLevel())
- .endpoint(properties.getUri());
- if (ConnectionMode.GATEWAY == properties.getConnectionMode()) {
+ .consistencyLevel(cosmosProperties.getConsistencyLevel())
+ .endpoint(cosmosProperties.getUri());
+ if (ConnectionMode.GATEWAY == cosmosProperties.getConnectionMode()) {
cosmosClientBuilder.gatewayMode();
}
return cosmosClientBuilder;
@@ -55,8 +63,8 @@ public CosmosClientBuilder cosmosClientBuilder(AzureKeyCredential azureKeyCreden
@Override
public CosmosConfig cosmosConfig() {
return CosmosConfig.builder()
- .enableQueryMetrics(properties.isPopulateQueryMetrics())
- .responseDiagnosticsProcessor(properties.getResponseDiagnosticsProcessor())
+ .enableQueryMetrics(cosmosProperties.isPopulateQueryMetrics())
+ .responseDiagnosticsProcessor(cosmosProperties.getResponseDiagnosticsProcessor())
.build();
}
}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java
index 5bde488b7acfc..0f03d7976726e 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java
@@ -21,10 +21,10 @@ public class CosmosHealthIndicator extends AbstractHealthIndicator {
private static final Logger LOGGER = LoggerFactory.getLogger(CosmosHealthIndicator.class);
- @Value("${azure.cosmos.database}")
+ @Value("${spring.cloud.azure.cosmos.database}")
private String dbName;
- @Value("${azure.cosmos.uri}")
+ @Value("${spring.cloud.azure.cosmos.uri}")
private String uri;
private final CosmosAsyncClient cosmosAsyncClient;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java
index a523ffe41d53e..b1d916e29e0f2 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java
@@ -5,6 +5,7 @@
import com.azure.cosmos.ConnectionMode;
import com.azure.cosmos.ConsistencyLevel;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.spring.data.cosmos.core.ResponseDiagnosticsProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,10 +19,12 @@
* Configuration properties for Cosmos database, consistency, telemetry, connection, query metrics and diagnostics.
*/
@Validated
-@ConfigurationProperties("azure.cosmos")
-public class CosmosProperties {
+@ConfigurationProperties(CosmosProperties.PREFIX)
+public class CosmosProperties extends AzureProperties {
private static final Logger LOGGER = LoggerFactory.getLogger(CosmosProperties.class);
+ public static final String PREFIX = "spring.cloud.azure.cosmos";
+
/**
* Document DB URI.
*/
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java
index fb16f55a4be18..581ad23e42fb7 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java
@@ -3,6 +3,7 @@
package com.azure.spring.autoconfigure.jms;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.StringUtils;
@@ -14,8 +15,10 @@
* {@link ConfigurationProperties} for configuring Azure Service Bus JMS.
*/
@Validated
-@ConfigurationProperties("spring.jms.servicebus")
-public class AzureServiceBusJMSProperties {
+@ConfigurationProperties(AzureServiceBusJMSProperties.PREFIX)
+public class AzureServiceBusJMSProperties extends AzureProperties {
+
+ public static final String PREFIX = "spring.jms.servicebus";
private String connectionString;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java
index 669970a51227c..149963c7a614e 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java
@@ -3,7 +3,9 @@
package com.azure.spring.autoconfigure.jms;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import org.apache.qpid.jms.JmsConnectionFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -17,6 +19,8 @@
import javax.jms.ConnectionFactory;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
+
/**
* Automatic configuration class of ServiceBusJMS for Standard and Basic Service Bus
*/
@@ -32,7 +36,8 @@ public class NonPremiumServiceBusJMSAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties) {
+ public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties,
+ @Qualifier(AZURE_PROPERTY_BEAN_NAME)AzureProperties azureProperties) {
final String connectionString = serviceBusJMSProperties.getConnectionString();
final String clientId = serviceBusJMSProperties.getTopicClientId();
final int idleTimeout = serviceBusJMSProperties.getIdleTimeout();
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java
index 7afe1471d849c..8f83e3de8f3f1 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java
@@ -3,8 +3,10 @@
package com.azure.spring.autoconfigure.jms;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactory;
import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactorySettings;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -18,7 +20,9 @@
import javax.jms.ConnectionFactory;
-import static com.azure.spring.utils.ApplicationId.AZURE_SPRING_SERVICE_BUS;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_SERVICE_BUS;
+import static com.azure.spring.core.ApplicationId.VERSION;
/**
* Automatic configuration class of ServiceBusJMS for Premium Service Bus
@@ -33,7 +37,8 @@ public class PremiumServiceBusJMSAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties) {
+ public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties,
+ @Qualifier(AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) {
final String connectionString = serviceBusJMSProperties.getConnectionString();
final String clientId = serviceBusJMSProperties.getTopicClientId();
final int idleTimeout = serviceBusJMSProperties.getIdleTimeout();
@@ -44,7 +49,7 @@ public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties servi
final SpringServiceBusJmsConnectionFactory springServiceBusJmsConnectionFactory =
new SpringServiceBusJmsConnectionFactory(connectionString, settings);
springServiceBusJmsConnectionFactory.setClientId(clientId);
- springServiceBusJmsConnectionFactory.setCustomUserAgent(AZURE_SPRING_SERVICE_BUS);
+ springServiceBusJmsConnectionFactory.setCustomUserAgent(AZURE_SPRING_SERVICE_BUS + VERSION);
return springServiceBusJmsConnectionFactory;
}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java
index f91d9e391c3c3..e2f2b7e115fe7 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java
@@ -5,10 +5,11 @@
import com.azure.core.http.policy.HttpLogOptions;
import com.azure.spring.autoconfigure.storage.resource.AzureStorageProtocolResolver;
-import com.azure.spring.utils.ApplicationId;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.storage.file.share.ShareServiceClientBuilder;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -18,6 +19,11 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_BLOB;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_FILES;
+import static com.azure.spring.core.ApplicationId.VERSION;
+
/**
* An auto-configuration for Azure Storage Account
*
@@ -32,27 +38,29 @@ public class StorageAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty("azure.storage.blob-endpoint")
- public BlobServiceClientBuilder blobServiceClientBuilder(StorageProperties storageProperties) {
+ public BlobServiceClientBuilder blobServiceClientBuilder(StorageProperties storageProperties, @Qualifier(
+ AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) {
final String accountName = storageProperties.getAccountName();
final String accountKey = storageProperties.getAccountKey();
return new BlobServiceClientBuilder()
.endpoint(storageProperties.getBlobEndpoint())
.credential(new StorageSharedKeyCredential(accountName, accountKey))
- .httpLogOptions(new HttpLogOptions().setApplicationId(ApplicationId.AZURE_SPRING_STORAGE_BLOB));
+ .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_STORAGE_BLOB + VERSION));
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty("azure.storage.file-endpoint")
- public ShareServiceClientBuilder shareServiceClientBuilder(StorageProperties storageProperties) {
+ public ShareServiceClientBuilder shareServiceClientBuilder(StorageProperties storageProperties, @Qualifier(
+ AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) {
final String accountName = storageProperties.getAccountName();
final String accountKey = storageProperties.getAccountKey();
return new ShareServiceClientBuilder()
.endpoint(storageProperties.getFileEndpoint())
.credential(new StorageSharedKeyCredential(accountName, accountKey))
- .httpLogOptions(new HttpLogOptions().setApplicationId(ApplicationId.AZURE_SPRING_STORAGE_FILES));
+ .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_STORAGE_FILES + VERSION));
}
@Configuration
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java
index 227beef3798be..76b95cc9ea9f0 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java
@@ -3,6 +3,7 @@
package com.azure.spring.autoconfigure.storage;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@@ -13,8 +14,10 @@
* Storage properties.
*/
@Validated
-@ConfigurationProperties("azure.storage")
-public class StorageProperties {
+@ConfigurationProperties(StorageProperties.PREFIX)
+public class StorageProperties extends AzureProperties {
+
+ public static final String PREFIX = "spring.cloud.azure.storage";
@NotEmpty
@Pattern(regexp = "^[a-z0-9]{3,24}$",
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java
new file mode 100644
index 0000000000000..65731c0a33f73
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java
@@ -0,0 +1,34 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.autoconfigure.unity;
+
+/**
+ * Unified properties for Azure SDK clients.
+ */
+public class AzureProperties {
+
+ public static final String AZURE_PROPERTY_BEAN_NAME = "azureProperties";
+
+ public static final String PREFIX = "spring.cloud.azure";
+
+ private CredentialProperties credential;
+
+ private EnvironmentProperties environment;
+
+ public CredentialProperties getCredential() {
+ return credential;
+ }
+
+ public void setCredential(CredentialProperties credential) {
+ this.credential = credential;
+ }
+
+ public EnvironmentProperties getEnvironment() {
+ return environment;
+ }
+
+ public void setEnvironment(EnvironmentProperties environment) {
+ this.environment = environment;
+ }
+}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java
new file mode 100644
index 0000000000000..321639a3078be
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.autoconfigure.unity;
+
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.boot.context.properties.bind.Binder;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+import org.springframework.core.env.Environment;
+import org.springframework.core.type.AnnotationMetadata;
+
+/**
+ * Automatic configuration class of {@link AzureProperties} for unified configuration of Azure Spring libraries.
+ */
+@Import(AzurePropertyAutoConfiguration.Registrar.class)
+public class AzurePropertyAutoConfiguration {
+
+ public static final String AZURE_PROPERTY_BEAN_NAME = "azureProperties";
+
+ static class Registrar implements EnvironmentAware, ImportBeanDefinitionRegistrar {
+ private Environment environment;
+
+ @Override
+ public void setEnvironment(Environment environment) {
+ this.environment = environment;
+ }
+
+ @Override
+ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
+ BeanDefinitionRegistry registry) {
+ if (!registry.containsBeanDefinition(AZURE_PROPERTY_BEAN_NAME)) {
+ registry.registerBeanDefinition(AZURE_PROPERTY_BEAN_NAME,
+ BeanDefinitionBuilder.genericBeanDefinition(AzureProperties.class,
+ () -> Binder.get(this.environment).bindOrCreate(AzureProperties.PREFIX,
+ AzureProperties.class)).getBeanDefinition());
+ }
+ }
+
+ }
+}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyEnvironmentPostProcessor.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyEnvironmentPostProcessor.java
new file mode 100644
index 0000000000000..451d09a553a3b
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyEnvironmentPostProcessor.java
@@ -0,0 +1,166 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.autoconfigure.unity;
+
+import com.azure.spring.autoconfigure.aad.AADAuthenticationProperties;
+import com.azure.spring.autoconfigure.b2c.AADB2CProperties;
+import com.azure.spring.autoconfigure.cosmos.CosmosProperties;
+import com.azure.spring.autoconfigure.jms.AzureServiceBusJMSProperties;
+import com.azure.spring.autoconfigure.storage.StorageProperties;
+import com.azure.spring.keyvault.KeyVaultProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.context.config.ConfigFileApplicationListener;
+import org.springframework.boot.context.properties.bind.Bindable;
+import org.springframework.boot.context.properties.bind.Binder;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.PropertiesPropertySource;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * TODO: Map legacy property to current spring properties.
+ */
+public class AzurePropertyEnvironmentPostProcessor {
+
+ public static final int DEFAULT_ORDER = ConfigFileApplicationListener.DEFAULT_ORDER + 1;
+
+ private static final String LEGACY_AAD_PREFIX = "azure.activedirectory";
+ private static final String LEGACY_AAD_B2C_PREFIX = "azure.activedirectory.b2c";
+ private static final String LEGACY_COSMOS_PREFIX = "azure.cosmos";
+ private static final String LEGACY_JMS_PREFIX = "spring.jms.servicebus";
+ private static final String LEGACY_STORAGE_PREFIX = "azure.storage";
+ private static final String LEGACY_KEYVAULT_PREFIX = "azure.keyvault";
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AzurePropertyEnvironmentPostProcessor.class);
+
+ private static final Map LEGACY_TO_CURRENT = new HashMap() {
+ {
+ put(LEGACY_AAD_PREFIX + ".clientId", AADAuthenticationProperties.PREFIX + ".credential.clientId");
+ put(LEGACY_AAD_PREFIX + ".clientSecret", AADAuthenticationProperties.PREFIX + ".credential.clientSecret");
+ put(LEGACY_AAD_PREFIX + ".tenantId", AADAuthenticationProperties.PREFIX + ".credential.tenantId");
+ put(LEGACY_AAD_PREFIX + ".baseUri", AADAuthenticationProperties.PREFIX + ".environment.authorityHost");
+ put(LEGACY_AAD_PREFIX + ".graphBaseUri", AADAuthenticationProperties.PREFIX + ".environment.graphBaseUri");
+ put(LEGACY_AAD_PREFIX + ".userGroup.allowedGroupNames", AADAuthenticationProperties.PREFIX + ".userGroup"
+ + ".allowedGroupNames");
+ put(LEGACY_AAD_PREFIX + ".userGroup.allowedGroupIds", AADAuthenticationProperties.PREFIX + ".userGroup"
+ + ".allowedGroupIds");
+ put(LEGACY_AAD_PREFIX + ".userGroup.enableFullList", AADAuthenticationProperties.PREFIX + ".userGroup"
+ + ".enableFullList");
+ put(LEGACY_AAD_PREFIX + ".userNameAttribute", AADAuthenticationProperties.PREFIX
+ + ".userNameAttribute");
+ put(LEGACY_AAD_PREFIX + ".redirectUriTemplate", AADAuthenticationProperties.PREFIX
+ + ".redirectUriTemplate");
+ put(LEGACY_AAD_PREFIX + ".appIdUri", AADAuthenticationProperties.PREFIX + ".appIdUri");
+ put(LEGACY_AAD_PREFIX + ".authenticateAdditionalParameters",
+ AADAuthenticationProperties.PREFIX + ".authenticateAdditionalParameters");
+ put(LEGACY_AAD_PREFIX + ".jwtConnectTimeout", AADAuthenticationProperties.PREFIX + ".jwtConnectTimeout");
+ put(LEGACY_AAD_PREFIX + ".jwtReadTimeout", AADAuthenticationProperties.PREFIX + ".jwtReadTimeout");
+ put(LEGACY_AAD_PREFIX + ".jwtSizeLimit", AADAuthenticationProperties.PREFIX + ".jwtSizeLimit");
+ put(LEGACY_AAD_PREFIX + ".jwkSetCacheLifespan", AADAuthenticationProperties.PREFIX
+ + ".jwkSetCacheLifespan");
+ put(LEGACY_AAD_PREFIX + ".jwkSetCacheRefreshTime", AADAuthenticationProperties.PREFIX
+ + ".jwkSetCacheRefreshTime");
+ put(LEGACY_AAD_PREFIX + ".postLogoutRedirectUri", AADAuthenticationProperties.PREFIX
+ + ".postLogoutRedirectUri");
+ put(LEGACY_AAD_PREFIX + ".allowTelemetry", AADAuthenticationProperties.PREFIX + ".allowTelemetry");
+ put(LEGACY_AAD_PREFIX + ".sessionStateless", AADAuthenticationProperties.PREFIX + ".sessionStateless");
+ put(LEGACY_AAD_PREFIX + ".graphMembershipUri", AADAuthenticationProperties.PREFIX + ".graphMembershipUri");
+ put(LEGACY_AAD_PREFIX + ".authorizationClients", AADAuthenticationProperties.PREFIX
+ + ".authorizationClients");
+
+ put(LEGACY_AAD_B2C_PREFIX + ".clientId", AADB2CProperties.PREFIX + ".credential.clientId");
+ put(LEGACY_AAD_B2C_PREFIX + ".clientSecret", AADB2CProperties.PREFIX + ".credential.clientSecret");
+ put(LEGACY_AAD_B2C_PREFIX + ".tenantId", AADB2CProperties.PREFIX + ".credential.tenantId");
+ put(LEGACY_AAD_B2C_PREFIX + ".baseUri", AADB2CProperties.PREFIX + ".environment.authorityHost");
+ put(LEGACY_AAD_B2C_PREFIX + ".tenant", AADB2CProperties.PREFIX + ".tenant");
+ put(LEGACY_AAD_B2C_PREFIX + ".appIdUri", AADB2CProperties.PREFIX + ".appIdUri");
+ put(LEGACY_AAD_B2C_PREFIX + ".jwtConnectTimeout", AADB2CProperties.PREFIX + ".jwtConnectTimeout");
+ put(LEGACY_AAD_B2C_PREFIX + ".jwtReadTimeout", AADB2CProperties.PREFIX + ".jwtReadTimeout");
+ put(LEGACY_AAD_B2C_PREFIX + ".jwtSizeLimit", AADB2CProperties.PREFIX + ".jwtSizeLimit");
+ put(LEGACY_AAD_B2C_PREFIX + ".logoutSuccessUrl", AADB2CProperties.PREFIX + ".logoutSuccessUrl");
+ put(LEGACY_AAD_B2C_PREFIX + ".authenticateAdditionalParameters", AADB2CProperties.PREFIX
+ + ".authenticateAdditionalParameters");
+ put(LEGACY_AAD_B2C_PREFIX + ".userNameAttributeName", AADB2CProperties.PREFIX + ".userNameAttributeName");
+ put(LEGACY_AAD_B2C_PREFIX + ".allowTelemetry", AADB2CProperties.PREFIX + ".allowTelemetry");
+ put(LEGACY_AAD_B2C_PREFIX + ".replyUrl", AADB2CProperties.PREFIX + ".replyUrl");
+ put(LEGACY_AAD_B2C_PREFIX + ".loginFlow", AADB2CProperties.PREFIX + ".loginFlow");
+ put(LEGACY_AAD_B2C_PREFIX + ".userFlows", AADB2CProperties.PREFIX + ".userFlows");
+ put(LEGACY_AAD_B2C_PREFIX + ".authorizationClients", AADB2CProperties.PREFIX + ".authorizationClients");
+
+
+ put(LEGACY_COSMOS_PREFIX + ".uri", CosmosProperties.PREFIX + ".uri");
+ put(LEGACY_COSMOS_PREFIX + ".key", CosmosProperties.PREFIX + ".key");
+ put(LEGACY_COSMOS_PREFIX + ".consistencyLevel", CosmosProperties.PREFIX + ".consistencyLevel");
+ put(LEGACY_COSMOS_PREFIX + ".database", CosmosProperties.PREFIX + ".database");
+ put(LEGACY_COSMOS_PREFIX + ".populateQueryMetrics", CosmosProperties.PREFIX + ".populateQueryMetrics");
+ put(LEGACY_COSMOS_PREFIX + ".allowTelemetry", CosmosProperties.PREFIX + ".allowTelemetry");
+ put(LEGACY_COSMOS_PREFIX + ".connectionMode", CosmosProperties.PREFIX + ".connectionMode");
+ put(LEGACY_COSMOS_PREFIX + ".responseDiagnosticsProcessor", CosmosProperties.PREFIX
+ + ".responseDiagnosticsProcessor");
+
+ put(LEGACY_JMS_PREFIX + ".connectionString", AzureServiceBusJMSProperties.PREFIX + ".connectionString");
+ put(LEGACY_JMS_PREFIX + ".topicClientId", AzureServiceBusJMSProperties.PREFIX + ".topicClientId");
+ put(LEGACY_JMS_PREFIX + ".idleTimeout", AzureServiceBusJMSProperties.PREFIX + ".idleTimeout");
+ put(LEGACY_JMS_PREFIX + ".pricingTier", AzureServiceBusJMSProperties.PREFIX + ".pricingTier");
+
+ put(LEGACY_STORAGE_PREFIX + ".accountName", StorageProperties.PREFIX + ".accountName");
+ put(LEGACY_STORAGE_PREFIX + ".blobEndpoint", StorageProperties.PREFIX + ".blobEndpoint");
+ put(LEGACY_STORAGE_PREFIX + ".fileEndpoint", StorageProperties.PREFIX + ".fileEndpoint");
+ put(LEGACY_STORAGE_PREFIX + ".accountKey", StorageProperties.PREFIX + ".accountKey");
+
+ put(LEGACY_KEYVAULT_PREFIX + ".clientId", KeyVaultProperties.PREFIX + ".credential.clientId");
+ put(LEGACY_KEYVAULT_PREFIX + ".clientKey", KeyVaultProperties.PREFIX + ".credential.clientSecret");
+ put(LEGACY_KEYVAULT_PREFIX + ".tenantId", KeyVaultProperties.PREFIX + ".credential.tenantId");
+ put(LEGACY_KEYVAULT_PREFIX + ".certificatePath", KeyVaultProperties.PREFIX + ".credential.certificatePath");
+ put(LEGACY_KEYVAULT_PREFIX + ".certificatePassword", KeyVaultProperties.PREFIX + ".credential"
+ + ".certificatePassword");
+ put(LEGACY_KEYVAULT_PREFIX + ".order", KeyVaultProperties.PREFIX + ".order");
+ put(LEGACY_KEYVAULT_PREFIX + ".uri", KeyVaultProperties.PREFIX + ".uri");
+ put(LEGACY_KEYVAULT_PREFIX + ".enabled", KeyVaultProperties.PREFIX + ".enabled");
+ put(LEGACY_KEYVAULT_PREFIX + ".secretKeys", KeyVaultProperties.PREFIX + ".secretKeys");
+ put(LEGACY_KEYVAULT_PREFIX + ".refreshInterval", KeyVaultProperties.PREFIX + ".refreshInterval");
+ put(LEGACY_KEYVAULT_PREFIX + ".allowTelemetry", KeyVaultProperties.PREFIX + ".allowTelemetry");
+ put(LEGACY_KEYVAULT_PREFIX + ".caseSensitiveKeys", KeyVaultProperties.PREFIX + ".caseSensitiveKeys");
+
+ }
+ };
+
+ private int order = DEFAULT_ORDER;
+
+ public int getOrder() {
+ return order;
+ }
+
+ public void setOrder(int order) {
+ this.order = order;
+ }
+
+
+ public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
+
+ Properties properties = new Properties();
+
+ for (Map.Entry e : LEGACY_TO_CURRENT.entrySet()) {
+ Object value = Binder.get(environment)
+ .bind(e.getKey(), Bindable.of(Object.class))
+ .orElse(null);
+ if (null != value) {
+ properties.put(e.getValue(), value);
+ LOGGER.info(e.getKey() + " property detected! Use the {} instead!", e.getValue());
+ }
+ }
+
+ // This post-processor is called multiple times but sets the properties only once.
+ if (!CollectionUtils.isEmpty(properties)) {
+ PropertiesPropertySource propertiesPropertySource =
+ new PropertiesPropertySource(AzurePropertyEnvironmentPostProcessor.class.getName(), properties);
+ environment.getPropertySources().addLast(propertiesPropertySource);
+ }
+ }
+}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java
new file mode 100644
index 0000000000000..b3e0b904c3ad2
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java
@@ -0,0 +1,76 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.autoconfigure.unity;
+
+
+/**
+ * Azure properties used for getting token credential.
+ */
+public class CredentialProperties {
+
+ /**
+ * Client id to use when performing service principal authentication with Azure.
+ */
+ private String clientId;
+
+ /**
+ * Client secret to use when performing service principal authentication with Azure.
+ */
+ private String clientSecret;
+
+ /**
+ * Path of a PEM certificate file to use when performing service principal authentication with Azure.
+ */
+ private String certificatePath;
+
+ /**
+ * Password of the certificate file.
+ */
+ private String certificatePassword;
+
+ /**
+ * Tenant id for the Azure resources.
+ */
+ private String tenantId;
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getClientSecret() {
+ return clientSecret;
+ }
+
+ public void setClientSecret(String clientSecret) {
+ this.clientSecret = clientSecret;
+ }
+
+ public String getCertificatePath() {
+ return certificatePath;
+ }
+
+ public void setCertificatePath(String certificatePath) {
+ this.certificatePath = certificatePath;
+ }
+
+ public String getCertificatePassword() {
+ return certificatePassword;
+ }
+
+ public void setCertificatePassword(String certificatePassword) {
+ this.certificatePassword = certificatePassword;
+ }
+
+ public String getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(String tenantId) {
+ this.tenantId = tenantId;
+ }
+}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java
new file mode 100644
index 0000000000000..606b51f2d38bd
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java
@@ -0,0 +1,41 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+package com.azure.spring.autoconfigure.unity;
+
+/**
+ * Environment properties for endpoints in different Azure Clouds.
+ */
+public class EnvironmentProperties {
+
+ private String cloud;
+
+ private String authorityHost;
+
+ private String graphBaseUri;
+
+ public String getCloud() {
+ return cloud;
+ }
+
+ public void setCloud(String cloud) {
+ this.cloud = cloud;
+ }
+
+ public String getAuthorityHost() {
+ return authorityHost;
+ }
+
+ public void setAuthorityHost(String authorityHost) {
+ this.authorityHost = authorityHost;
+ }
+
+ public String getGraphBaseUri() {
+ return graphBaseUri;
+ }
+
+ public void setGraphBaseUri(String graphBaseUri) {
+ this.graphBaseUri = graphBaseUri;
+ }
+
+ //TODO: transfer cloud to AzureEnvironment
+}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java
new file mode 100644
index 0000000000000..9e0fcef114317
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java
@@ -0,0 +1,7 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+/**
+ * Package com.azure.spring.autoconfigure.unity;
+ */
+package com.azure.spring.autoconfigure.unity;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java
index d25ac9a0a5055..b3673511f148d 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java
@@ -3,8 +3,8 @@
package com.azure.spring.keyvault;
+import com.azure.spring.autoconfigure.unity.AzurePropertyEnvironmentPostProcessor;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.context.config.ConfigFileApplicationListener;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
@@ -14,7 +14,7 @@
* Leverage {@link EnvironmentPostProcessor} to add Key Vault secrets as a property source.
*/
public class KeyVaultEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
- public static final int DEFAULT_ORDER = ConfigFileApplicationListener.DEFAULT_ORDER + 1;
+ public static final int DEFAULT_ORDER = AzurePropertyEnvironmentPostProcessor.DEFAULT_ORDER + 1;
private int order = DEFAULT_ORDER;
/**
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java
index c8ff4435bb441..da92c89d2be76 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java
@@ -5,14 +5,16 @@
import com.azure.core.credential.TokenCredential;
import com.azure.core.http.policy.HttpLogOptions;
+import com.azure.identity.AzureAuthorityHosts;
import com.azure.identity.ClientCertificateCredentialBuilder;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.identity.ManagedIdentityCredentialBuilder;
-import com.azure.identity.implementation.IdentityClientOptions;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.SecretServiceVersion;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.spring.keyvault.KeyVaultProperties.Property;
+import com.google.common.annotations.VisibleForTesting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.bind.Bindable;
@@ -27,9 +29,9 @@
import java.util.List;
import java.util.Optional;
-import static com.azure.spring.utils.ApplicationId.AZURE_SPRING_KEY_VAULT;
-import static com.azure.spring.utils.Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME;
-import static com.azure.spring.utils.Constants.DEFAULT_REFRESH_INTERVAL_MS;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_KEY_VAULT;
+import static com.azure.spring.core.ApplicationId.VERSION;
+import static com.azure.spring.keyvault.KeyVaultProperties.DELIMITER;
import static org.springframework.core.env.StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME;
/**
@@ -38,8 +40,9 @@
*/
class KeyVaultEnvironmentPostProcessorHelper {
+ public static final String AZURE_KEYVAULT_PROPERTYSOURCE_NAME = "azurekv";
+ public static final long DEFAULT_REFRESH_INTERVAL_MS = 1800000L;
private static final Logger LOGGER = LoggerFactory.getLogger(KeyVaultEnvironmentPostProcessorHelper.class);
- private static final String DEFAULT_AUTHORITY_HOST = new IdentityClientOptions().getAuthorityHost();
private final ConfigurableEnvironment environment;
KeyVaultEnvironmentPostProcessorHelper(final ConfigurableEnvironment environment) {
@@ -82,7 +85,7 @@ public void addKeyVaultPropertySource(String normalizedName) {
.vaultUrl(vaultUri)
.credential(tokenCredential)
.serviceVersion(secretServiceVersion)
- .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_KEY_VAULT))
+ .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_KEY_VAULT + VERSION))
.buildClient();
try {
final MutablePropertySources sources = this.environment.getPropertySources();
@@ -132,16 +135,18 @@ public TokenCredential getCredentials() {
public TokenCredential getCredentials(String normalizedName) {
//use service principle to authenticate
final String clientId = getPropertyValue(normalizedName, Property.CLIENT_ID);
- final String clientKey = getPropertyValue(normalizedName, Property.CLIENT_KEY);
+ final String clientSecret = Optional.ofNullable(getPropertyValue(normalizedName, Property.CLIENT_SECRET))
+ .orElse(getPropertyValue(normalizedName, Property.CLIENT_KEY));
final String tenantId = getPropertyValue(normalizedName, Property.TENANT_ID);
final String certificatePath = getPropertyValue(normalizedName, Property.CERTIFICATE_PATH);
final String certificatePassword = getPropertyValue(normalizedName, Property.CERTIFICATE_PASSWORD);
- final String authorityHost = getPropertyValue(normalizedName, Property.AUTHORITY_HOST, DEFAULT_AUTHORITY_HOST);
- if (clientId != null && tenantId != null && clientKey != null) {
+ final String authorityHost = Optional.ofNullable(getPropertyValue(normalizedName, Property.AUTHORITY_HOST))
+ .orElse(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD);
+ if (clientId != null && tenantId != null && clientSecret != null) {
LOGGER.debug("Will use custom credentials");
return new ClientSecretCredentialBuilder()
.clientId(clientId)
- .clientSecret(clientKey)
+ .clientSecret(clientSecret)
.tenantId(tenantId)
.authorityHost(authorityHost)
.build();
@@ -174,13 +179,18 @@ public TokenCredential getCredentials(String normalizedName) {
return new ManagedIdentityCredentialBuilder().build();
}
- private String getPropertyValue(final String normalizedName, final Property property) {
- return getPropertyValue(normalizedName, property, null);
- }
+ @VisibleForTesting
+ String getPropertyValue(final String normalizedName, final Property property) {
+ List propertyNames = Arrays.asList(KeyVaultProperties.getPropertyName(normalizedName, property),
+ AzureProperties.PREFIX + DELIMITER + property.getName());
- private String getPropertyValue(final String normalizedName, final Property property, String defaultValue) {
- return Optional.of(KeyVaultProperties.getPropertyName(normalizedName, property))
- .map(environment::getProperty)
- .orElse(defaultValue);
+ String propertyValue = null;
+ for (String key : propertyNames) {
+ propertyValue = environment.getProperty(key);
+ if (null != propertyValue) {
+ break;
+ }
+ }
+ return propertyValue;
}
}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java
index 9d396e278770b..944e730fa8ba5 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java
@@ -3,62 +3,26 @@
package com.azure.spring.keyvault;
-import com.azure.spring.utils.Constants;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
/**
* KeyVaultProperties
*/
@ConfigurationProperties(value = KeyVaultProperties.PREFIX)
-public class KeyVaultProperties {
-
- public static final String PREFIX = "azure.keyvault";
- public static final String DELIMITER = ".";
-
- public String getClientId() {
- return clientId;
- }
-
- public void setClientId(String clientId) {
- this.clientId = clientId;
- }
-
- public String getClientKey() {
- return clientKey;
- }
+public class KeyVaultProperties extends AzureProperties {
- public void setClientKey(String clientKey) {
- this.clientKey = clientKey;
- }
+ private static final Logger LOGGER = LoggerFactory.getLogger(KeyVaultProperties.class);
- public String getTenantId() {
- return tenantId;
- }
-
- public void setTenantId(String tenantId) {
- this.tenantId = tenantId;
- }
-
- public String getCertificatePath() {
- return certificatePath;
- }
-
- public void setCertificatePath(String certificatePath) {
- this.certificatePath = certificatePath;
- }
-
- public String getCertificatePassword() {
- return certificatePassword;
- }
-
- public void setCertificatePassword(String certificatePassword) {
- this.certificatePassword = certificatePassword;
- }
+ public static final String PREFIX = "spring.cloud.azure.keyvault";
+ public static final String DELIMITER = ".";
public Boolean getEnabled() {
return enabled;
@@ -121,40 +85,38 @@ public void setAllowTelemetry(String allowTelemetry) {
private Boolean enabled;
private List secretKeys;
- private Long refreshInterval = Constants.DEFAULT_REFRESH_INTERVAL_MS;
+ private Long refreshInterval = KeyVaultEnvironmentPostProcessorHelper.DEFAULT_REFRESH_INTERVAL_MS;
private String allowTelemetry;
/**
* Defines the constant for the property that enables/disables case sensitive keys.
*/
private String caseSensitiveKeys;
- private String certificatePassword;
- private String certificatePath;
- private String clientId;
- private String clientKey;
+
/**
* The constant used to define the order of the key vaults you are
* delivering (comma delimited, e.g 'my-vault, my-vault-2').
*/
private String order;
- private String tenantId;
+
private String uri;
/**
* enum Property
*/
public enum Property {
- CASE_SENSITIVE_KEYS("case-sensitive-keys"),
- CERTIFICATE_PASSWORD("certificate-password"),
- AUTHORITY_HOST("authority-host"),
+ AUTHORITY_HOST("environment.authority-host"),
+ CLIENT_ID("credential.client-id"),
+ CLIENT_SECRET("credential.client-secret"),
+ CERTIFICATE_PATH("credential.certificate-path"),
+ CERTIFICATE_PASSWORD("credential.certificate-password"),
+ TENANT_ID("credential.tenant-id"),
SECRET_SERVICE_VERSION("secret-service-version"),
- CERTIFICATE_PATH("certificate-path"),
- CLIENT_ID("client-id"),
+ CASE_SENSITIVE_KEYS("case-sensitive-keys"),
CLIENT_KEY("client-key"),
ENABLED("enabled"),
ORDER("order"),
REFRESH_INTERVAL("refresh-interval"),
SECRET_KEYS("secret-keys"),
- TENANT_ID("tenant-id"),
URI("uri");
private final String name;
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java
index 4d59acdb3d7ed..a90fd5344d061 100644
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java
+++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java
@@ -5,7 +5,7 @@
import org.springframework.core.env.EnumerablePropertySource;
-import static com.azure.spring.utils.Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME;
+import static com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessorHelper.AZURE_KEYVAULT_PROPERTYSOURCE_NAME;
/**
* A key vault implementation of {@link EnumerablePropertySource} to enumerate all property pairs in Key Vault.
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java
deleted file mode 100644
index 351fc91c9083f..0000000000000
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.spring.utils;
-
-/**
- * Util class for Azure urls
- */
-public class AzureCloudUrls {
- public static String getBaseUrl(String cloudType) {
- return cloudType.equals("Global") ? "https://login.microsoftonline.com/"
- : "https://login.partner.microsoftonline.cn/";
- }
-
- public static String getGraphBaseUrl(String cloudType) {
- return cloudType.equals("Global") ? "https://graph.microsoft.com/"
- : "https://microsoftgraph.chinacloudapi.cn/";
- }
-
- public static String getServiceManagementBaseUrl(String cloudType) {
- return cloudType.equals("Global") ? "https://management.azure.com/"
- : "https://management.chinacloudapi.cn/";
- }
-}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java
deleted file mode 100644
index 5691c49d2d7b9..0000000000000
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.spring.utils;
-
-/**
- * Util class for Constants
- */
-public class Constants {
-
- public static final String AZURE_KEYVAULT_PROPERTYSOURCE_NAME = "azurekv";
-
- public static final long DEFAULT_REFRESH_INTERVAL_MS = 1800000L;
-
-}
diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java
deleted file mode 100644
index 3cb1c549cbba8..0000000000000
--- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.spring.utils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-/**
- * Util class to load property files.
- */
-public class PropertyLoader {
- private static final String PROJECT_PROPERTY_FILE = "/META-INF/project.properties";
-
- private static final String TELEMETRY_CONFIG_FILE = "/telemetry.config";
-
- /**
- * To load a property value from the file.
- * @param file The source file to load properties from.
- * @param property The property name.
- * @return The property value.
- */
- private static String getProperty(String file, String property) {
- try (InputStream inputStream = PropertyLoader.class.getResourceAsStream(file)) {
- if (inputStream != null) {
- final Properties properties = new Properties();
- properties.load(inputStream);
-
- return properties.getProperty(property);
- }
- } catch (IOException e) {
- // Omitted
- }
-
- return "unknown";
- }
-
- public static String getProjectVersion() {
- return getProperty(PROJECT_PROPERTY_FILE, "project.version");
- }
-}
diff --git a/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories b/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories
index c494bcfd9eb6b..2e45ae4573cf0 100644
--- a/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories
+++ b/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,5 @@ com.azure.spring.autoconfigure.jms.NonPremiumServiceBusJMSAutoConfiguration,\
com.azure.spring.autoconfigure.jms.PremiumServiceBusJMSAutoConfiguration,\
com.azure.spring.autoconfigure.storage.StorageAutoConfiguration,\
com.azure.spring.autoconfigure.storage.StorageHealthConfiguration,\
-com.azure.spring.keyvault.KeyVaultHealthConfiguration
+com.azure.spring.keyvault.KeyVaultHealthConfiguration,\
+com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java
index e412429d2d8ea..7b89407b2f230 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java
@@ -3,6 +3,8 @@
package com.azure.spring.autoconfigure.aad;
+import com.azure.identity.AzureAuthorityHosts;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
@@ -42,6 +44,51 @@ public void canSetProperties() {
}
}
+ @Test
+ @Disabled
+ public void loadPropertiesFromCredentialProperties() {
+
+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
+ addInlinedPropertiesToEnvironment(
+ context,
+ AzureProperties.PREFIX + ".tenant-id=azure-tenant-id",
+ AzureProperties.PREFIX + ".client-id=azure-client-id",
+ AzureProperties.PREFIX + ".authority-host=azure-authority-host",
+ AzureProperties.PREFIX + ".environment=AzureGermany",
+ AAD_PROPERTY_PREFIX + "client-id=" + TestConstants.CLIENT_ID,
+ AAD_PROPERTY_PREFIX + "client-secret=" + TestConstants.CLIENT_SECRET
+ );
+ context.register(Config.class);
+ context.refresh();
+
+ final AADAuthenticationProperties properties = context.getBean(AADAuthenticationProperties.class);
+
+ assertThat(properties.getTenantId()).isEqualTo("azure-tenant-id");
+ assertThat(properties.getClientId()).isEqualTo(TestConstants.CLIENT_ID);
+ assertThat(properties.getClientSecret()).isEqualTo(TestConstants.CLIENT_SECRET);
+ assertThat(properties.getBaseUri()).isEqualTo("azure-authority-host/");
+
+ }
+
+ @Test
+ @Disabled
+ public void testGetBaseUriFromEnvironment() {
+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
+ addInlinedPropertiesToEnvironment(
+ context,
+ AzureProperties.PREFIX + ".environment=AzureGermany",
+ AAD_PROPERTY_PREFIX + "tenant-id=azure-tenant-id",
+ AAD_PROPERTY_PREFIX + "client-id=" + TestConstants.CLIENT_ID,
+ AAD_PROPERTY_PREFIX + "client-secret=" + TestConstants.CLIENT_SECRET
+ );
+ context.register(Config.class);
+ context.refresh();
+
+ final AADAuthenticationProperties properties = context.getBean(AADAuthenticationProperties.class);
+
+ assertThat(properties.getBaseUri()).isEqualTo(AzureAuthorityHosts.AZURE_GERMANY);
+ }
+
private void configureAllRequiredProperties(AnnotationConfigApplicationContext context) {
addInlinedPropertiesToEnvironment(
context,
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java
index 65e2b0254c789..bac88ff2d76e2 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java
@@ -9,11 +9,13 @@
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
-import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.boot.test.context.FilteredClassLoader;
+import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -33,7 +35,8 @@
public class AADAuthenticationFilterTest {
private static final String TOKEN = "dummy-token";
- private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
+ .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class))
.withConfiguration(AutoConfigurations.of(AADAuthenticationFilterAutoConfiguration.class));
private final UserPrincipalManager userPrincipalManager;
private final HttpServletRequest request;
@@ -130,4 +133,21 @@ public void testAlreadyAuthenticated() throws ServletException, IOException, Par
verify(userPrincipalManager, times(0)).buildUserPrincipal(TOKEN);
}
+ @Test
+ @Disabled
+ public void testAADAuthenticationFilterAutoConfiguration() {
+
+ this.contextRunner.withPropertyValues(
+ "azure.activedirectory.client-id=", "spring.cloud.azure.client-id="
+ ).run(context -> assertThat(context).doesNotHaveBean(AADAuthenticationFilterAutoConfiguration.class));
+
+ this.contextRunner.withPropertyValues(
+ "azure.activedirectory.client-id=" + TestConstants.CLIENT_ID
+ ).run(context -> assertThat(context).hasSingleBean(AADAuthenticationFilterAutoConfiguration.class));
+
+ this.contextRunner.withPropertyValues(
+ "spring.cloud.azure.client-id=" + TestConstants.CLIENT_ID
+ ).run(context -> assertThat(context).hasSingleBean(AADAuthenticationFilterAutoConfiguration.class));
+
+ }
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java
index bd3dc518dee1b..97d46694e750f 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java
@@ -2,8 +2,10 @@
// Licensed under the MIT License.
package com.azure.spring.autoconfigure.b2c;
+import com.azure.spring.autoconfigure.unity.CredentialProperties;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
@@ -64,6 +66,24 @@ public void testAutoConfigurationBean() {
});
}
+ @Test
+ @Disabled
+ public void testAutoConfigurationBeanWithCredentialProperties() {
+ new WebApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class))
+ .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class))
+ .withPropertyValues("spring.cloud.azure.client-id=fake-client-id",
+ String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET),
+ String.format("%s.%s=%s", AADB2CConstants.USER_FLOWS,
+ AADB2CConstants.TEST_KEY_SIGN_UP_OR_IN, AADB2CConstants.TEST_SIGN_UP_OR_IN_NAME),
+ String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI)
+ ).run(c -> {
+ final AADB2CAutoConfiguration autoConfig = c.getBean(AADB2CAutoConfiguration.class);
+
+ Assertions.assertNotNull(autoConfig);
+ });
+ }
+
@Test
public void testPropertiesBean() {
getDefaultContextRunner().run(c -> {
@@ -89,6 +109,31 @@ public void testPropertiesBean() {
});
}
+ @Test
+ @Disabled
+ public void testCredentialPropertiesBean() {
+ new WebApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class))
+ .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class))
+ .withPropertyValues("spring.cloud.azure.tenant-id=fake-tenant-id",
+ "spring.cloud.azure.client-id=fake-client-id",
+ String.format("%s.%s=%s", AADB2CConstants.USER_FLOWS,
+ AADB2CConstants.TEST_KEY_SIGN_UP_OR_IN, AADB2CConstants.TEST_SIGN_UP_OR_IN_NAME),
+ String.format("%s=%s", AADB2CConstants.CLIENT_ID, AADB2CConstants.TEST_CLIENT_ID),
+ String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET),
+ String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI)
+ ).run(c -> {
+ final AADB2CProperties properties = c.getBean(AADB2CProperties.class);
+ final CredentialProperties credentialProperties = c.getBean(CredentialProperties.class);
+
+ Assertions.assertNotNull(properties);
+ Assertions.assertNotNull(credentialProperties);
+ Assertions.assertEquals(properties.getClientId(), AADB2CConstants.TEST_CLIENT_ID);
+ Assertions.assertEquals(properties.getClientSecret(), AADB2CConstants.TEST_CLIENT_SECRET);
+ Assertions.assertEquals(properties.getTenantId(), "fake-tenant-id");
+ });
+ }
+
@Test
public void testAADB2CAuthorizationRequestResolverBean() {
getDefaultContextRunner().run(c -> {
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java
index f01aaaeab29c9..5b69f88667f96 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java
@@ -5,19 +5,26 @@
import com.azure.core.credential.AzureKeyCredential;
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosClientBuilder;
+import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.spring.data.cosmos.config.CosmosConfig;
import com.azure.spring.data.cosmos.core.CosmosTemplate;
import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
+import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.CLOUD;
import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.DATABASE_NAME;
import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.KEY;
+import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.CLIENT_ID;
import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.URI;
-import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getCommonPropertyValues;
+import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getCosmosPropertyValues;
+import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getUnifiedPropertyValues;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -28,7 +35,7 @@ public class CosmosAutoConfigurationTest {
@Test
public void testCosmosAutoConfigurationWithoutEnableConfigFile() {
this.contextRunner
- .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(new ClassPathResource("cosmos.enable.config")))
.run((context) -> {
assertThat(context).doesNotHaveBean(CosmosConfig.class);
@@ -38,7 +45,7 @@ public void testCosmosAutoConfigurationWithoutEnableConfigFile() {
@Test
public void testCosmosAutoConfigurationWithoutConditionalOnClass() {
this.contextRunner
- .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(CosmosAsyncClient.class, CosmosTemplate.class))
.run((context) -> {
assertThat(context).doesNotHaveBean(CosmosConfig.class);
@@ -48,27 +55,33 @@ public void testCosmosAutoConfigurationWithoutConditionalOnClass() {
@Test
public void testCosmosAutoConfigurationBean() {
this.contextRunner
- .withPropertyValues(getCommonPropertyValues())
- .withConfiguration(AutoConfigurations.of(ConfigurationWithMockCosmosAsyncClient.class))
+ .withPropertyValues(getCosmosPropertyValues())
+ .withPropertyValues(getUnifiedPropertyValues())
+ .withConfiguration(AutoConfigurations.of(ConfigurationWithMockCosmosAsyncClient.class, AzurePropertyAutoConfiguration.class))
.run((context) -> {
assertThat(context).hasSingleBean(CosmosAsyncClient.class);
assertThat(context).hasSingleBean(CosmosTemplate.class);
assertThat(context).hasSingleBean(AzureKeyCredential.class);
assertThat(context).hasSingleBean(CosmosClientBuilder.class);
assertThat(context).hasSingleBean(CosmosConfig.class);
+ assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME);
CosmosProperties cosmosProperties = context.getBean(CosmosProperties.class);
assertThat(cosmosProperties.getUri()).isEqualTo(URI);
assertThat(cosmosProperties.getKey()).isEqualTo(KEY);
assertThat(cosmosProperties.getDatabase()).isEqualTo(DATABASE_NAME);
+
+ AzureProperties azureProperties = (AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME);
+ assertThat(azureProperties.getCredential().getClientId()).isEqualTo(CLIENT_ID);
+ assertThat(azureProperties.getEnvironment().getCloud()).isEqualTo(CLOUD);
});
}
@Configuration(proxyBeanMethods = false)
static class ConfigurationWithMockCosmosAsyncClient extends CosmosAutoConfiguration {
- ConfigurationWithMockCosmosAsyncClient(CosmosProperties properties) {
- super(properties);
+ ConfigurationWithMockCosmosAsyncClient(CosmosProperties cosmosProperties, @Qualifier(AZURE_PROPERTY_BEAN_NAME)AzureProperties azureProperties) {
+ super(cosmosProperties, azureProperties);
}
@Override
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java
index f66db34846d84..1e8b8dde08278 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java
@@ -24,7 +24,7 @@
public class CosmosPropertiesTest {
@Test
- public void canSetAllProperties() {
+ public void canSetProperties() {
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) {
configureCosmosProperties(context);
context.register(Config.class);
@@ -36,6 +36,8 @@ public void canSetAllProperties() {
assertThat(properties.getConsistencyLevel()).isEqualTo(PropertySettingUtil.CONSISTENCY_LEVEL);
assertThat(properties.isPopulateQueryMetrics()).isEqualTo(PropertySettingUtil.POPULATE_QUERY_METRICS);
assertThat(properties.getConnectionMode()).isEqualTo(PropertySettingUtil.CONNECTION_MODE);
+ assertThat(properties.getCredential().getClientId()).isEqualTo(PropertySettingUtil.CLIENT_ID);
+ assertThat(properties.getEnvironment().getCloud()).isEqualTo(PropertySettingUtil.CLOUD);
}
}
@@ -62,9 +64,9 @@ public void emptySettingNotAllowed() {
Collections.sort(errorStrings);
final List errorStringsExpected = Arrays.asList(
- "Field error in object 'azure.cosmos' on field 'database': rejected value [null];",
- "Field error in object 'azure.cosmos' on field 'key': rejected value [null];",
- "Field error in object 'azure.cosmos' on field 'uri': rejected value [null];"
+ "Field error in object 'spring.cloud.azure.cosmos' on field 'database': rejected value [null];",
+ "Field error in object 'spring.cloud.azure.cosmos' on field 'key': rejected value [null];",
+ "Field error in object 'spring.cloud.azure.cosmos' on field 'uri': rejected value [null];"
);
assertThat(errorStrings.size()).isEqualTo(errorStringsExpected.size());
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java
index 4d984289497d9..5a8d716309c10 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java
@@ -15,12 +15,18 @@ public class PropertySettingUtil {
public static final boolean POPULATE_QUERY_METRICS = true;
public static final ConsistencyLevel CONSISTENCY_LEVEL = ConsistencyLevel.STRONG;
public static final ConnectionMode CONNECTION_MODE = ConnectionMode.DIRECT;
- public static final String PROPERTY_URI = "azure.cosmos.uri";
- public static final String PROPERTY_KEY = "azure.cosmos.key";
- public static final String PROPERTY_DBNAME = "azure.cosmos.database";
- public static final String PROPERTY_CONSISTENCY_LEVEL = "azure.cosmos.consistency-level";
- public static final String PROPERTY_POPULATE_QUERY_METRICS = "azure.cosmos.populateQueryMetrics";
- public static final String PROPERTY_CONNECTION_MODE = "azure.cosmos.connection-mode";
+ public static final String CLIENT_ID = "for-test-purpose";
+ public static final String CLOUD = "AzureChina";
+ public static final String PROPERTY_URI = "spring.cloud.azure.cosmos.uri";
+ public static final String PROPERTY_KEY = "spring.cloud.azure.cosmos.key";
+ public static final String PROPERTY_DBNAME = "spring.cloud.azure.cosmos.database";
+ public static final String PROPERTY_CONSISTENCY_LEVEL = "spring.cloud.azure.cosmos.consistency-level";
+ public static final String PROPERTY_POPULATE_QUERY_METRICS = "spring.cloud.azure.cosmos.populateQueryMetrics";
+ public static final String PROPERTY_CONNECTION_MODE = "spring.cloud.azure.cosmos.connection-mode";
+ public static final String PROPERTY_CLIENT_ID = "spring.cloud.azure.cosmos.credential.client-id";
+ public static final String PROPERTY_CLOUD = "spring.cloud.azure.cosmos.environment.cloud";
+ public static final String PROPERTY_UNIFIED_CLIENT_ID = "spring.cloud.azure.credential.client-id";
+ public static final String PROPERTY_UNIFIED_CLOUD = "spring.cloud.azure.environment.cloud";
public static void configureCosmosProperties(AnnotationConfigApplicationContext context) {
addInlinedPropertiesToEnvironment(
@@ -30,11 +36,13 @@ public static void configureCosmosProperties(AnnotationConfigApplicationContext
PROPERTY_DBNAME + "=" + DATABASE_NAME,
PROPERTY_CONSISTENCY_LEVEL + "=" + CONSISTENCY_LEVEL.name(),
PROPERTY_POPULATE_QUERY_METRICS + "=" + POPULATE_QUERY_METRICS,
- PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name()
+ PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name(),
+ PROPERTY_CLIENT_ID + "=" + CLIENT_ID,
+ PROPERTY_CLOUD + "=" + CLOUD
);
}
- public static String[] getCommonPropertyValues() {
+ public static String[] getCosmosPropertyValues() {
return new String[] { PROPERTY_URI + "=" + URI,
PROPERTY_KEY + "=" + KEY,
PROPERTY_DBNAME + "=" + DATABASE_NAME,
@@ -43,4 +51,10 @@ public static String[] getCommonPropertyValues() {
PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name()
};
}
+
+ public static String[] getUnifiedPropertyValues() {
+ return new String[] { PROPERTY_UNIFIED_CLIENT_ID + "=" + CLIENT_ID,
+ PROPERTY_UNIFIED_CLOUD + "=" + CLOUD
+ };
+ }
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java
index 78a81597b2065..581f82e1aae33 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java
@@ -3,6 +3,8 @@
package com.azure.spring.autoconfigure.jms;
+import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -14,6 +16,7 @@
import javax.jms.ConnectionFactory;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -87,6 +90,24 @@ public void testAzureServiceBusJMSPropertiesConfigured() {
CONNECTION_STRING);
assertThat(context.getBean(AzureServiceBusJMSProperties.class).getTopicClientId()).isEqualTo("cid");
assertThat(context.getBean(AzureServiceBusJMSProperties.class).getIdleTimeout()).isEqualTo(123);
+ assertThat(context.getBean(AzureServiceBusJMSProperties.class).getCredential().getClientSecret()).isEqualTo("for-test-purpose");
+ assertThat(context.getBean(AzureServiceBusJMSProperties.class).getEnvironment().getCloud()).isEqualTo("AzureGermany");
+ }
+ );
+ }
+
+ @Test
+ public void testAzurePropertiesConfigured() {
+ ApplicationContextRunner contextRunner = getContextRunnerWithProperties();
+
+ contextRunner.run(
+ context -> {
+ assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME);
+
+ assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getCredential().getCertificatePassword())
+ .isEqualTo("for-test-purpose");
+ assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getEnvironment().getAuthorityHost())
+ .isEqualTo("for-test-purpose");
}
);
}
@@ -95,7 +116,7 @@ private ApplicationContextRunner getEmptyContextRunner() {
return new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(NonPremiumServiceBusJMSAutoConfiguration.class,
- JmsAutoConfiguration.class))
+ JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withPropertyValues(
"spring.jms.servicebus.pricing-tier=basic"
);
@@ -105,12 +126,16 @@ private ApplicationContextRunner getContextRunnerWithProperties() {
return new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(NonPremiumServiceBusJMSAutoConfiguration.class,
- JmsAutoConfiguration.class))
+ JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withPropertyValues(
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING,
"spring.jms.servicebus.topic-client-id=cid",
"spring.jms.servicebus.idle-timeout=123",
- "spring.jms.servicebus.pricing-tier=basic"
+ "spring.jms.servicebus.pricing-tier=basic",
+ "spring.jms.servicebus.credential.client-secret=for-test-purpose",
+ "spring.jms.servicebus.environment.cloud=AzureGermany",
+ "spring.cloud.azure.credential.certificate-password=for-test-purpose",
+ "spring.cloud.azure.environment.authority-host=for-test-purpose"
);
}
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java
index 7cc42d8c1137d..d5639cde4735c 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java
@@ -3,6 +3,8 @@
package com.azure.spring.autoconfigure.jms;
+import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -14,6 +16,7 @@
import javax.jms.ConnectionFactory;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -26,10 +29,10 @@ public class PremiumServiceBusJMSAutoConfigurationTest {
public void testAzureServiceBusPremiumAutoConfiguration() {
ApplicationContextRunner contextRunner = getEmptyContextRunner();
contextRunner.withPropertyValues("spring.jms.servicebus.pricing-tier=basic")
- .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
+ .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
contextRunner.withPropertyValues("spring.jms.servicebus.enabled=false")
- .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
+ .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
contextRunner.withPropertyValues("spring.jms.servicebus.connection-string=" + CONNECTION_STRING)
.run(context -> assertThat(context).hasSingleBean(AzureServiceBusJMSProperties.class));
@@ -47,7 +50,7 @@ public void testAzureServiceBusJMSPropertiesConnectionStringValidation() {
public void testWithoutServiceBusJMSNamespace() {
ApplicationContextRunner contextRunner = getEmptyContextRunner();
contextRunner.withClassLoader(new FilteredClassLoader(ServiceBusJmsConnectionFactory.class))
- .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
+ .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class));
}
@Test
@@ -73,10 +76,30 @@ public void testAzureServiceBusJMSPropertiesConfigured() {
contextRunner.run(
context -> {
assertThat(context).hasSingleBean(AzureServiceBusJMSProperties.class);
+ assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME);
+
assertThat(context.getBean(AzureServiceBusJMSProperties.class).getConnectionString()).isEqualTo(
CONNECTION_STRING);
assertThat(context.getBean(AzureServiceBusJMSProperties.class).getTopicClientId()).isEqualTo("cid");
assertThat(context.getBean(AzureServiceBusJMSProperties.class).getIdleTimeout()).isEqualTo(123);
+ assertThat(context.getBean(AzureServiceBusJMSProperties.class).getCredential().getClientSecret()).isEqualTo("for-test-purpose");
+ assertThat(context.getBean(AzureServiceBusJMSProperties.class).getEnvironment().getCloud()).isEqualTo("AzureGermany");
+ }
+ );
+ }
+
+ @Test
+ public void testAzurePropertiesConfigured() {
+ ApplicationContextRunner contextRunner = getContextRunnerWithProperties();
+
+ contextRunner.run(
+ context -> {
+ assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME);
+
+ assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getCredential().getCertificatePassword())
+ .isEqualTo("for-test-purpose");
+ assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getEnvironment().getAuthorityHost())
+ .isEqualTo("for-test-purpose");
}
);
}
@@ -84,7 +107,8 @@ public void testAzureServiceBusJMSPropertiesConfigured() {
private ApplicationContextRunner getEmptyContextRunner() {
return new ApplicationContextRunner()
- .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, JmsAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class,
+ JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withPropertyValues(
"spring.jms.servicebus.pricing-tier=premium"
);
@@ -93,12 +117,17 @@ private ApplicationContextRunner getEmptyContextRunner() {
private ApplicationContextRunner getContextRunnerWithProperties() {
return new ApplicationContextRunner()
- .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, JmsAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class,
+ JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withPropertyValues(
"spring.jms.servicebus.connection-string=" + CONNECTION_STRING,
"spring.jms.servicebus.topic-client-id=cid",
"spring.jms.servicebus.idle-timeout=123",
- "spring.jms.servicebus.pricing-tier=premium"
+ "spring.jms.servicebus.pricing-tier=premium",
+ "spring.jms.servicebus.credential.client-secret=for-test-purpose",
+ "spring.jms.servicebus.environment.cloud=AzureGermany",
+ "spring.cloud.azure.credential.certificate-password=for-test-purpose",
+ "spring.cloud.azure.environment.authority-host=for-test-purpose"
);
}
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java
index a95a9b65702df..5e19b187f8d59 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java
@@ -3,6 +3,8 @@
package com.azure.spring.autoconfigure.storage;
+import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration;
+import com.azure.spring.autoconfigure.unity.AzureProperties;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.file.share.ShareServiceClientBuilder;
import org.junit.jupiter.api.Test;
@@ -13,6 +15,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
+import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -21,7 +24,7 @@
public class StorageAutoConfigurationTest {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
- .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, AzurePropertyAutoConfiguration.class))
.withUserConfiguration(TestConfiguration.class);
@Test
@@ -38,22 +41,41 @@ public void testWithoutStorageClient() {
@Test
public void testAzureStoragePropertiesIllegal() {
- this.contextRunner.withPropertyValues("azure.storage.accountName=a")
+ this.contextRunner.withPropertyValues("spring.cloud.azure.storage.accountName=a")
.run(context -> assertThrows(IllegalStateException.class,
() -> context.getBean(StorageProperties.class)));
}
@Test
public void testAzureStoragePropertiesConfigured() {
- this.contextRunner.withPropertyValues("azure.storage.account-name=acc1")
- .withPropertyValues("azure.storage.account-key=key1")
- .withPropertyValues("azure.storage.blob-endpoint=endpoint1")
+ this.contextRunner.withPropertyValues("spring.cloud.azure.storage.account-name=acc1")
+ .withPropertyValues("spring.cloud.azure.storage.account-key=key1")
+ .withPropertyValues("spring.cloud.azure.storage.blob-endpoint=endpoint1")
+ .withPropertyValues("spring.cloud.azure.storage.credential.client-id=for-test-purpose")
+ .withPropertyValues("spring.cloud.azure.storage.environment.cloud=AzureUSGovernment")
.run(context -> {
assertThat(context).hasSingleBean(StorageProperties.class);
final StorageProperties storageProperties = context.getBean(StorageProperties.class);
assertThat(storageProperties.getAccountName()).isEqualTo("acc1");
assertThat(storageProperties.getAccountKey()).isEqualTo("key1");
assertThat(storageProperties.getBlobEndpoint()).isEqualTo("endpoint1");
+ assertThat(storageProperties.getCredential().getClientId()).isEqualTo("for-test-purpose");
+ assertThat(storageProperties.getEnvironment().getCloud()).isEqualTo("AzureUSGovernment");
+ });
+ }
+
+ @Test
+ public void testAzurePropertiesConfigured() {
+ this.contextRunner.withPropertyValues("spring.cloud.azure.credential.client-id=for-test-purpose")
+ .withPropertyValues("spring.cloud.azure.environment.cloud=AzureUSGovernment")
+ .withPropertyValues("spring.cloud.azure.storage.account-name=acc1")
+ .run(context -> {
+ assertThat(context).hasSingleBean(StorageProperties.class);
+ assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME);
+
+ final AzureProperties azureProperties = (AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME);
+ assertThat(azureProperties.getCredential().getClientId()).isEqualTo("for-test-purpose");
+ assertThat(azureProperties.getEnvironment().getCloud()).isEqualTo("AzureUSGovernment");
});
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java
index b869f6fab4c5e..8441383cb5b49 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java
@@ -48,7 +48,7 @@ public void testWithStorageConfigurationWithConnectionUp() {
.withAllowBeanDefinitionOverriding(true)
.withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class))
.withUserConfiguration(TestConfigurationConnectionUp.class)
- .withPropertyValues("azure.storage.account-name=acc1");
+ .withPropertyValues("spring.cloud.azure.storage.account-name=acc1");
contextRunner.run(context -> {
Health health = context.getBean("blobStorageHealthIndicator", BlobStorageHealthIndicator.class)
@@ -64,7 +64,7 @@ public void testWithStorageConfigurationWithConnectionDown() {
.withAllowBeanDefinitionOverriding(true)
.withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class))
.withUserConfiguration(TestConfigurationConnectionDown.class)
- .withPropertyValues("azure.storage.account-name=acc1");
+ .withPropertyValues("spring.cloud.azure.storage.account-name=acc1");
contextRunner.run(context -> {
Health health = context.getBean("blobStorageHealthIndicator", BlobStorageHealthIndicator.class)
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java
index 729f4dd396048..9567265769287 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java
@@ -45,7 +45,7 @@ public void testWithStorageConfigurationWithConnectionUp() {
.withAllowBeanDefinitionOverriding(true)
.withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class))
.withUserConfiguration(TestConfigurationConnectionUp.class)
- .withPropertyValues("azure.storage.account-name=acc1");
+ .withPropertyValues("spring.cloud.azure.storage.account-name=acc1");
contextRunner.run(context -> {
Health health = context.getBean(FileStorageHealthIndicator.class).getHealth(true);
Assertions.assertEquals(Status.UP, health.getStatus());
@@ -59,7 +59,7 @@ public void testWithStorageConfigurationWithConnectionDown() {
.withAllowBeanDefinitionOverriding(true)
.withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class))
.withUserConfiguration(TestConfigurationConnectionDown.class)
- .withPropertyValues("azure.storage.account-name=acc1");
+ .withPropertyValues("spring.cloud.azure.storage.account-name=acc1");
contextRunner.run(context -> {
Health health = context.getBean(FileStorageHealthIndicator.class).getHealth(true);
Assertions.assertEquals(Status.DOWN, health.getStatus());
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java
new file mode 100644
index 0000000000000..ad426473d3715
--- /dev/null
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java
@@ -0,0 +1,39 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+package com.azure.spring.autoconfigure.unity;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AzurePropertyAutoConfigurationTest {
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(AzurePropertyAutoConfiguration.class));
+
+ @Test
+ public void testAutoConfiguration() {
+ this.contextRunner.run(context -> {
+ assertThat(context).hasSingleBean(AzurePropertyAutoConfiguration.class);
+ assertThat(context).hasSingleBean(AzureProperties.class);
+ });
+ }
+
+ @Test
+ public void testAzureProperties() {
+ this.contextRunner.withPropertyValues(
+ "spring.cloud.azure.credential.client-id=fake-client-id",
+ "spring.cloud.azure.credential.client_secret=fake-client-secret",
+ "spring.cloud.azure.environment.authorityHost=fake-authority-host",
+ "spring.cloud.azure.environment.GRAPH_BASE_URI=fake-graph-base-uri"
+ )
+ .run(context -> {
+ final AzureProperties azureProperties = context.getBean(AzureProperties.class);
+ assertThat(azureProperties.getCredential().getClientId()).isEqualTo("fake-client-id");
+ assertThat(azureProperties.getCredential().getClientSecret()).isEqualTo("fake-client-secret");
+ assertThat(azureProperties.getEnvironment().getAuthorityHost()).isEqualTo("fake-authority-host");
+ assertThat(azureProperties.getEnvironment().getGraphBaseUri()).isEqualTo("fake-graph-base-uri");
+ });
+ }
+}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java
index f18385ae86748..16b256fce10eb 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java
@@ -13,7 +13,7 @@
import java.util.ArrayList;
import java.util.LinkedHashMap;
-import static com.azure.spring.utils.Constants.DEFAULT_REFRESH_INTERVAL_MS;
+import static com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessorHelper.DEFAULT_REFRESH_INTERVAL_MS;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CaseSensitiveKeyVaultTest {
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java
index feb169a3c1549..352c690083720 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java
@@ -3,8 +3,6 @@
package com.azure.spring.keyvault;
-import com.azure.spring.utils.Constants;
-
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +26,7 @@ public void testAzureKvPropertySourceNotInitialized() {
final MutablePropertySources sources =
((ConfigurableEnvironment) context.getEnvironment()).getPropertySources();
- assertFalse(sources.contains(Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME), "PropertySources should not "
+ assertFalse(sources.contains(KeyVaultEnvironmentPostProcessorHelper.AZURE_KEYVAULT_PROPERTYSOURCE_NAME), "PropertySources should not "
+ "contains azurekv when enabled=false");
}
}
diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java
index 076636c5f111e..8bbcd26f73c76 100644
--- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java
+++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java
@@ -22,12 +22,18 @@
import java.util.HashMap;
import java.util.Map;
+import static com.azure.spring.keyvault.KeyVaultProperties.Property.AUTHORITY_HOST;
import static com.azure.spring.keyvault.KeyVaultProperties.Property.CERTIFICATE_PATH;
import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_ID;
import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_KEY;
+import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_SECRET;
+import static com.azure.spring.keyvault.KeyVaultProperties.Property.ORDER;
import static com.azure.spring.keyvault.KeyVaultProperties.Property.TENANT_ID;
+import static com.azure.spring.keyvault.KeyVaultProperties.Property.URI;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
public class KeyVaultEnvironmentPostProcessorTest {
private KeyVaultEnvironmentPostProcessorHelper keyVaultEnvironmentPostProcessorHelper;
@@ -84,7 +90,7 @@ public void testGetCredentialsWhenMSIEnabledInAppService() {
@Test
public void testGetCredentialsWhenMSIEnabledInVMWithClientId() {
- testProperties.put("azure.keyvault.client-id", "aaaa-bbbb-cccc-dddd");
+ testProperties.put("spring.cloud.azure.keyvault.credential.client-id", "aaaa-bbbb-cccc-dddd");
propertySources.addLast(new MapPropertySource("Test_Properties", testProperties));
keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment);
@@ -113,7 +119,7 @@ public void postProcessorHasConfiguredOrder() {
public void postProcessorOrderConfigurable() {
final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(OrderedProcessConfig.class))
- .withPropertyValues("azure.keyvault.uri=fakeuri", "azure.keyvault.enabled=true");
+ .withPropertyValues("spring.cloud.azure.keyvault.uri=fakeuri", "spring.cloud.azure.keyvault.enabled=true");
contextRunner.run(context -> {
assertThat("Configured order for KeyVaultEnvironmentPostProcessor is different with default order "
@@ -130,13 +136,13 @@ public void postProcessorOrderConfigurable() {
*/
@Test
public void testMultipleKeyVaults() {
- testProperties.put("azure.keyvault.order", "myvault, myvault2");
- testProperties.put("azure.keyvault.myvault.client-id", "aaaa-bbbb-cccc-dddd");
- testProperties.put("azure.keyvault.myvault.client-key", "mySecret");
- testProperties.put("azure.keyvault.myvault.tenant-id", "myid");
- testProperties.put("azure.keyvault.myvault2.client-id", "aaaa-bbbb-cccc-dddd");
- testProperties.put("azure.keyvault.myvault2.client-key", "mySecret");
- testProperties.put("azure.keyvault.myvault2.tenant-id", "myid");
+ testProperties.put("spring.cloud.azure.keyvault.order", "myvault, myvault2");
+ testProperties.put("spring.cloud.azure.keyvault.myvault.credential.client-id", "aaaa-bbbb-cccc-dddd");
+ testProperties.put("spring.cloud.azure.keyvault.myvault.credential.client-secret", "mySecret");
+ testProperties.put("spring.cloud.azure.keyvault.myvault.credential.tenant-id", "myid");
+ testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.client-id", "aaaa-bbbb-cccc-dddd");
+ testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.client-secret", "mySecret");
+ testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.tenant-id", "myid");
propertySources.addLast(new MapPropertySource("Test_Properties", testProperties));
keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment);
@@ -147,6 +153,72 @@ public void testMultipleKeyVaults() {
final TokenCredential credentials2 = keyVaultEnvironmentPostProcessorHelper.getCredentials("myvault2");
assertThat(credentials2, IsInstanceOf.instanceOf(ClientSecretCredential.class));
}
+
+ @Test
+ public void testGetCredentialFromKeyVaultProperties() {
+ testProperties.put("spring.cloud.azure.keyvault.credential.client-id", "aaaa-bbbb-cccc-dddd");
+ testProperties.put("spring.cloud.azure.keyvault.credential.client-secret", "mySecret");
+ testProperties.put("spring.cloud.azure.keyvault.credential.tenant-id", "myid");
+ propertySources.addLast(new MapPropertySource("Test_Properties", testProperties));
+ keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment);
+
+ final TokenCredential credentials = keyVaultEnvironmentPostProcessorHelper.getCredentials();
+
+ assertThat(credentials, IsInstanceOf.instanceOf(ClientSecretCredential.class));
+ }
+
+ @Test
+ public void testGetCredentialFromCommonProperties() {
+ testProperties.put("spring.cloud.azure.credential.client-id", "fake-client-id");
+ testProperties.put("spring.cloud.azure.credential.client-secret", "fake-client-secret");
+ testProperties.put("spring.cloud.azure.credential.tenant-id", "fake-tenant-id");
+ propertySources.addLast(new MapPropertySource("Test_Properties", testProperties));
+
+ keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment);
+
+ final TokenCredential credentials = keyVaultEnvironmentPostProcessorHelper.getCredentials();
+
+ assertThat(credentials, IsInstanceOf.instanceOf(ClientSecretCredential.class));
+ }
+
+ @Test
+ public void testGetPropertyValue() {
+ testProperties.put("spring.cloud.azure.credential.client-id", "client1");
+
+ testProperties.put("spring.cloud.azure.keyvault.credential.client-secret", "secret2");
+
+ testProperties.put("spring.cloud.azure.credential.tenant-id", "tenant1");
+ testProperties.put("spring.cloud.azure.keyvault.credential.tenant-id", "tenant2");
+
+ testProperties.put("spring.cloud.azure.environment.authority-host", "host1");
+ testProperties.put("spring.cloud.azure.keyvault.environment.authority-host", "host2");
+
+ testProperties.put("spring.cloud.azure.credential.certificate-path", "cert1");
+ testProperties.put("spring.cloud.azure.keyvault.mykeyvault.credential.certificate-path", "cert2");
+
+ testProperties.put("spring.cloud.azure.keyvault.uri", "uri1");
+
+ propertySources.addLast(new MapPropertySource("Test_Properties", testProperties));
+
+ keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment);
+
+ String clientId = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", CLIENT_ID);
+ String clientSecert = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", CLIENT_SECRET);
+ String tenantId = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", TENANT_ID);
+ String authorityHost = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", AUTHORITY_HOST);
+ String certificatePath = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("mykeyvault", CERTIFICATE_PATH);
+ String uri = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", URI);
+ String order = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", ORDER);
+
+ assertEquals("client1", clientId);
+ assertEquals("secret2", clientSecert);
+ assertEquals("tenant2", tenantId);
+ assertNotEquals("host1", authorityHost);
+ assertEquals("cert2", certificatePath);
+ assertEquals("uri1", uri);
+ assertNull(order);
+ }
+
}
@Configuration
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java
index 3b3eaf2624caf..d2b327ce288ed 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java
@@ -6,7 +6,7 @@
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.redis.models.RedisCache;
import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.RedisCacheManager;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -36,8 +36,8 @@ public class AzureRedisAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public RedisCacheManager redisCacheManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new RedisCacheManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new RedisCacheManager(azureResourceManager, azureContextProperties);
}
@ConditionalOnMissingBean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java
index fe13afd179fb5..3964c7bf9fff9 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java
@@ -7,8 +7,8 @@
import com.azure.messaging.eventhubs.EventHubConsumerAsyncClient;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.api.EnvironmentProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager;
import com.azure.spring.cloud.context.core.impl.StorageAccountManager;
import com.azure.spring.cloud.context.core.storage.StorageConnectionStringProvider;
@@ -48,16 +48,16 @@ public class AzureEventHubAutoConfiguration {
@ConditionalOnMissingBean
@ConditionalOnBean(AzureResourceManager.class)
public EventHubNamespaceManager eventHubNamespaceManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new EventHubNamespaceManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new EventHubNamespaceManager(azureResourceManager, azureContextProperties);
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(AzureResourceManager.class)
public StorageAccountManager storageAccountManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new StorageAccountManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new StorageAccountManager(azureResourceManager, azureContextProperties);
}
/**
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java
index 94d8859f57ebd..8014e3cf32ad1 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java
@@ -9,7 +9,7 @@
import com.azure.resourcemanager.eventhubs.models.EventHubNamespace;
import com.azure.resourcemanager.eventhubs.models.EventHubNamespaceAuthorizationRule;
import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager;
import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -71,8 +71,8 @@ public KafkaProperties kafkaProperties(EventHubNamespaceManager eventHubNamespac
@ConditionalOnMissingBean
@ConditionalOnBean(AzureResourceManager.class)
public EventHubNamespaceManager eventHubNamespaceManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new EventHubNamespaceManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new EventHubNamespaceManager(azureResourceManager, azureContextProperties);
}
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java
index e35b8153733b0..79d668134ffd0 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java
@@ -6,7 +6,7 @@
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider;
import org.slf4j.Logger;
@@ -38,10 +38,10 @@ public class AzureServiceBusAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- @ConditionalOnBean({ AzureResourceManager.class, AzureProperties.class })
+ @ConditionalOnBean({ AzureResourceManager.class, AzureContextProperties.class })
public ServiceBusNamespaceManager serviceBusNamespaceManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new ServiceBusNamespaceManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new ServiceBusNamespaceManager(azureResourceManager, azureContextProperties);
}
/**
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java
index c9460f5723c1d..8e0e7f709757d 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java
@@ -4,7 +4,7 @@
package com.azure.spring.cloud.autoconfigure.servicebus;
import com.azure.messaging.servicebus.ServiceBusProcessorClient;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager;
import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter;
@@ -41,8 +41,8 @@ public class AzureServiceBusQueueAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ServiceBusNamespaceManager.class)
- public ServiceBusQueueManager serviceBusQueueManager(AzureProperties azureProperties) {
- return new ServiceBusQueueManager(azureProperties);
+ public ServiceBusQueueManager serviceBusQueueManager(AzureContextProperties azureContextProperties) {
+ return new ServiceBusQueueManager(azureContextProperties);
}
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java
index b2c1ed1a472ec..d4ca7c95365e5 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java
@@ -4,7 +4,7 @@
package com.azure.spring.cloud.autoconfigure.servicebus;
import com.azure.messaging.servicebus.ServiceBusProcessorClient;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager;
@@ -42,15 +42,15 @@ public class AzureServiceBusTopicAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ServiceBusNamespaceManager.class)
- public ServiceBusTopicManager serviceBusTopicManager(AzureProperties azureProperties) {
- return new ServiceBusTopicManager(azureProperties);
+ public ServiceBusTopicManager serviceBusTopicManager(AzureContextProperties azureContextProperties) {
+ return new ServiceBusTopicManager(azureContextProperties);
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ServiceBusTopicManager.class)
- public ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager(AzureProperties azureProperties) {
- return new ServiceBusTopicSubscriptionManager(azureProperties);
+ public ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager(AzureContextProperties azureContextProperties) {
+ return new ServiceBusTopicSubscriptionManager(azureContextProperties);
}
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java
index 67c919af2a89d..b841d9211ed6b 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java
@@ -10,7 +10,7 @@
import com.azure.resourcemanager.storage.models.StorageAccount;
import com.azure.resourcemanager.storage.models.StorageAccountKey;
import com.azure.resourcemanager.storage.models.StorageAccounts;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager;
import com.azure.spring.cloud.context.core.impl.StorageAccountManager;
import com.azure.spring.integration.eventhub.api.EventHubClientFactory;
@@ -28,10 +28,10 @@
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.junit.jupiter.api.Assertions.assertThrows;
public class AzureEventHubAutoConfigurationTest {
@@ -106,7 +106,7 @@ public void testResourceManagerProvided() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithAzureResourceManagerAndConnectionProvider {
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java
index 4159ba5c8e97f..bdf971c962b2e 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java
@@ -13,7 +13,7 @@
import com.azure.resourcemanager.eventhubs.models.EventHubNamespace;
import com.azure.resourcemanager.eventhubs.models.EventHubNamespaceAuthorizationRule;
import com.azure.resourcemanager.eventhubs.models.EventHubNamespaces;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -82,7 +82,7 @@ public void testAzureEventHubPropertiesConfigured() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigurationWithResourceManager {
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java
index 7dec206618480..9774645642363 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java
@@ -6,7 +6,7 @@
import com.azure.core.amqp.AmqpTransportType;
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
import com.azure.resourcemanager.AzureResourceManager;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider;
import org.junit.jupiter.api.Test;
@@ -105,7 +105,7 @@ public void testWithAzureResourceManagerProvided() {
@Configuration
@Import(AzureServiceBusAutoConfiguration.class)
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithAzureResourceManager {
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java
index d5d793ca7cb2f..7df07968c87e9 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java
@@ -5,7 +5,7 @@
import com.azure.messaging.servicebus.ServiceBusProcessorClient;
import com.azure.resourcemanager.AzureResourceManager;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager;
import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter;
@@ -159,7 +159,7 @@ public void testMessageConverterProvided() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithServiceBusNamespaceManager {
@Bean
@@ -181,7 +181,7 @@ public ServiceBusConnectionStringProvider serviceBusConnectionStringProvider() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithAzureResourceManager {
@Bean
@@ -192,7 +192,7 @@ public AzureResourceManager azureResourceManager() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithMessageConverter {
@Bean
diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java
index e23b0df30e758..711ff58bcd9dd 100644
--- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java
@@ -5,7 +5,7 @@
import com.azure.messaging.servicebus.ServiceBusProcessorClient;
import com.azure.resourcemanager.AzureResourceManager;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager;
@@ -138,7 +138,7 @@ public void testMessageConverterProvided() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithServiceBusNamespaceManager {
@Bean
@@ -160,7 +160,7 @@ public ServiceBusConnectionStringProvider serviceBusConnectionStringProvider() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithAzureResourceManager {
@Bean
@@ -172,7 +172,7 @@ public AzureResourceManager azureResourceManager() {
}
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
public static class TestConfigWithMessageConverter {
@Bean
diff --git a/sdk/spring/azure-spring-cloud-context/CHANGELOG.md b/sdk/spring/azure-spring-cloud-context/CHANGELOG.md
index 5556ce355176b..df67010233e17 100644
--- a/sdk/spring/azure-spring-cloud-context/CHANGELOG.md
+++ b/sdk/spring/azure-spring-cloud-context/CHANGELOG.md
@@ -2,7 +2,6 @@
## 2.7.0-beta.1 (Unreleased)
-
## 2.6.0 (2021-06-23)
### Breaking Changes
- Remove `azure-spring-cloud-telemetry` module dependency.
diff --git a/sdk/spring/azure-spring-cloud-context/pom.xml b/sdk/spring/azure-spring-cloud-context/pom.xml
index 3793598f88837..1efea8bf66132 100644
--- a/sdk/spring/azure-spring-cloud-context/pom.xml
+++ b/sdk/spring/azure-spring-cloud-context/pom.xml
@@ -62,8 +62,9 @@
com.azure.spring
- azure-identity-spring
- 1.7.0-beta.1
+ azure-spring-boot-core
+ 1.0.0-beta.1
+
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java
index ccc7b550085c6..1174153bf0895 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java
@@ -7,7 +7,7 @@
import com.azure.core.management.profile.AzureProfile;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.context.core.api.CredentialsProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.context.core.api.EnvironmentProvider;
import com.azure.spring.cloud.context.core.impl.ResourceGroupManager;
import com.azure.spring.identity.DefaultSpringCredentialBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -17,17 +17,18 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
-
/**
* Auto-config to provide default {@link CredentialsProvider} for all Azure services
*
* @author Warren Zhu
*/
@Configuration
-@EnableConfigurationProperties(AzureProperties.class)
+@EnableConfigurationProperties(AzureContextProperties.class)
@ConditionalOnClass(AzureResourceManager.class)
@ConditionalOnProperty(prefix = "spring.cloud.azure", value = { "resource-group" })
+@Import(AzureEnvironmentAutoConfiguration.class)
public class AzureContextAutoConfiguration {
/**
@@ -48,16 +49,17 @@ public AzureResourceManager azureResourceManager(TokenCredential credential, Azu
@Bean
@ConditionalOnMissingBean
- public AzureProfile azureProfile(AzureProperties azureProperties) {
- return new AzureProfile(azureProperties.getTenantId(), azureProperties.getSubscriptionId(),
- azureProperties.getEnvironment().getAzureEnvironment());
+ public AzureProfile azureProfile(AzureContextProperties azureContextProperties,
+ EnvironmentProvider environmentProvider) {
+ return new AzureProfile(azureContextProperties.getTenantId(), azureContextProperties.getSubscriptionId(),
+ environmentProvider.getEnvironment());
}
@Bean
@ConditionalOnMissingBean
public TokenCredential credential(Environment environment) {
return new DefaultSpringCredentialBuilder().environment(environment)
- .alternativePrefix(AzureProperties.PREFIX)
+ .alternativePrefix(AzureContextProperties.PREFIX)
.build();
}
@@ -65,11 +67,11 @@ public TokenCredential credential(Environment environment) {
@ConditionalOnMissingBean
@ConditionalOnBean(AzureResourceManager.class)
public ResourceGroupManager resourceGroupManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- ResourceGroupManager resourceGroupManager = new ResourceGroupManager(azureResourceManager, azureProperties);
- if (azureProperties.isAutoCreateResources()
- && !resourceGroupManager.exists(azureProperties.getResourceGroup())) {
- resourceGroupManager.create(azureProperties.getResourceGroup());
+ AzureContextProperties azureContextProperties) {
+ ResourceGroupManager resourceGroupManager = new ResourceGroupManager(azureResourceManager, azureContextProperties);
+ if (azureContextProperties.isAutoCreateResources()
+ && !resourceGroupManager.exists(azureContextProperties.getResourceGroup())) {
+ resourceGroupManager.create(azureContextProperties.getResourceGroup());
}
return resourceGroupManager;
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java
similarity index 91%
rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java
rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java
index a55bdfaee6f44..6b9ca36d9f9a1 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java
@@ -1,10 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-package com.azure.spring.cloud.context.core.config;
+package com.azure.spring.cloud.autoconfigure.context;
-
-import com.azure.spring.cloud.context.core.api.CredentialSupplier;
import com.azure.spring.cloud.context.core.enums.AzureEnvironments;
import com.google.common.base.Strings;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -14,11 +12,11 @@
import javax.annotation.PostConstruct;
/**
- * Azure related properties.
+ * Azure Context related properties for resource management.
*/
@Validated
-@ConfigurationProperties(AzureProperties.PREFIX)
-public class AzureProperties implements CredentialSupplier {
+@ConfigurationProperties(AzureContextProperties.PREFIX)
+public class AzureContextProperties {
public static final String PREFIX = "spring.cloud.azure";
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java
index 57922173fefd4..4ddab3e9edc9e 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java
@@ -4,7 +4,6 @@
package com.azure.spring.cloud.autoconfigure.context;
import com.azure.spring.cloud.context.core.api.EnvironmentProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import com.azure.spring.cloud.context.core.impl.DefaultEnvironmentProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -21,11 +20,11 @@ public class AzureEnvironmentAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public EnvironmentProvider environmentProvider(@Autowired(required = false) AzureProperties azureProperties) {
+ public EnvironmentProvider environmentProvider(@Autowired(required = false) AzureContextProperties azureContextProperties) {
DefaultEnvironmentProvider defaultEnvironmentProvider = new DefaultEnvironmentProvider();
- if (azureProperties != null) {
- defaultEnvironmentProvider.setEnvironment(azureProperties.getEnvironment().getAzureEnvironment());
+ if (azureContextProperties != null) {
+ defaultEnvironmentProvider.setEnvironment(azureContextProperties.getEnvironment().getAzureEnvironment());
}
return defaultEnvironmentProvider;
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java
deleted file mode 100644
index 55661622cfc71..0000000000000
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.spring.cloud.context.core.api;
-
-/**
- * An interface meant to be implemented by configuration properties POJOs that store information about Azure
- * credentials.
- *
- * @author Warren Zhu
- */
-public interface CredentialSupplier {
-
- String getClientId();
-
- String getClientSecret();
-
- boolean isMsiEnabled();
-
- String getTenantId();
-
- String getSubscriptionId();
-}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java
deleted file mode 100644
index 21e74e7ad78ed..0000000000000
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-/**
- * Package com.azure.spring.cloud.context.core.config;
- */
-package com.azure.spring.cloud.context.core.config;
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java
index 9a9920fd5e851..82eb9912cccb8 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java
@@ -4,8 +4,8 @@
package com.azure.spring.cloud.context.core.impl;
import com.azure.core.management.exception.ManagementException;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.context.core.api.ResourceManager;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;
@@ -21,14 +21,14 @@ public abstract class AzureManager implements ResourceManager {
private static final Logger LOGGER = LoggerFactory.getLogger(AzureManager.class);
- private final AzureProperties azureProperties;
+ private final AzureContextProperties azureContextProperties;
protected final String resourceGroup;
protected final String region;
- public AzureManager(@NonNull AzureProperties azureProperties) {
- this.azureProperties = azureProperties;
- this.resourceGroup = azureProperties.getResourceGroup();
- this.region = azureProperties.getRegion();
+ public AzureManager(@NonNull AzureContextProperties azureContextProperties) {
+ this.azureContextProperties = azureContextProperties;
+ this.resourceGroup = azureContextProperties.getResourceGroup();
+ this.region = azureContextProperties.getRegion();
}
@Override
@@ -90,7 +90,7 @@ public T getOrCreate(K key) {
return result;
}
- if (!azureProperties.isAutoCreateResources()) {
+ if (!azureContextProperties.isAutoCreateResources()) {
String message = String.format("%s with name '%s' not existed.", getResourceType(), getResourceName(key));
LOGGER.warn(message);
String enable = "If you want to enable automatic resource creation. Please set spring.cloud.azure"
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java
deleted file mode 100644
index ff6b86af31ce2..0000000000000
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.spring.cloud.context.core.impl;
-
-import com.azure.core.credential.TokenCredential;
-import com.azure.identity.ClientSecretCredentialBuilder;
-import com.azure.identity.ManagedIdentityCredentialBuilder;
-import com.azure.spring.cloud.context.core.api.CredentialsProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A {@link CredentialsProvider} implementation that provides credentials based on user-provided properties and
- * defaults.
- *
- * @author Warren Zhu
- */
-public class DefaultCredentialsProvider implements CredentialsProvider {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCredentialsProvider.class);
-
- private final TokenCredential credentials;
-
- public DefaultCredentialsProvider(AzureProperties azureProperties) {
- this.credentials = initCredentials(azureProperties);
- }
-
- private TokenCredential initCredentials(AzureProperties azureProperties) {
- final String clientId = azureProperties.getClientId();
- final String clientSecret = azureProperties.getClientSecret();
- final String tenantId = azureProperties.getTenantId();
-
- if (clientId != null && clientSecret != null && tenantId != null) {
- LOGGER.debug("Will use ClientSecretCredential");
- return new ClientSecretCredentialBuilder()
- .clientId(clientId)
- .clientSecret(clientSecret)
- .tenantId(tenantId)
- .authorityHost(azureProperties.getEnvironment().getAzureEnvironment().getActiveDirectoryEndpoint())
- .build();
- }
-
- if (azureProperties.isMsiEnabled()) {
- final String managedIdentityClientId = azureProperties.getClientId();
-
- if (managedIdentityClientId != null) {
- LOGGER.debug("Will use MSI credentials with specified clientId");
- return new ManagedIdentityCredentialBuilder().clientId(managedIdentityClientId).build();
- }
- }
-
- LOGGER.debug("Will use MSI credentials");
- return new ManagedIdentityCredentialBuilder().build();
- }
-
- @Override
- public TokenCredential getCredential() {
- return this.credentials;
- }
-}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java
index ec57c47b95d3c..0958d5556f62a 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java
@@ -5,11 +5,11 @@
import com.azure.core.management.AzureEnvironment;
import com.azure.spring.cloud.context.core.api.EnvironmentProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
/**
* A {@link EnvironmentProvider} implementation that based on {@link
- * AzureProperties}.
+ * AzureContextProperties}.
*
* @author Warren Zhu
*/
@@ -22,7 +22,24 @@ public AzureEnvironment getEnvironment() {
return environment;
}
+ public void setEnvironment(String cloud) {
+ this.environment = toAzureEnvironment(cloud);
+ }
+
public void setEnvironment(AzureEnvironment environment) {
this.environment = environment;
}
+
+ private AzureEnvironment toAzureEnvironment(String cloud) {
+ switch (cloud) {
+ case "AzureChina":
+ return AzureEnvironment.AZURE_CHINA;
+ case "AzureGermany":
+ return AzureEnvironment.AZURE_GERMANY;
+ case "AzureUSGovernment":
+ return AzureEnvironment.AZURE_US_GOVERNMENT;
+ default:
+ return AzureEnvironment.AZURE;
+ }
+ }
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java
index c0ea127fa9e9d..26c2b00a1269d 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java
@@ -6,8 +6,8 @@
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.eventhubs.models.EventHub;
import com.azure.resourcemanager.eventhubs.models.EventHubConsumerGroup;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
+import com.azure.spring.core.util.Tuple;
/**
* Resource manager for Event Hubs consumer group.
@@ -15,9 +15,9 @@
public class EventHubConsumerGroupManager extends AzureManager> {
private final AzureResourceManager azureResourceManager;
-
- public EventHubConsumerGroupManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) {
- super(azureProperties);
+
+ public EventHubConsumerGroupManager(AzureResourceManager azureResourceManager, AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
this.azureResourceManager = azureResourceManager;
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java
index ff3bdfbe3d52b..3c7acc0410015 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java
@@ -7,8 +7,8 @@
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.eventhubs.models.EventHub;
import com.azure.resourcemanager.eventhubs.models.EventHubNamespace;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
+import com.azure.spring.core.util.Tuple;
/**
* Resource manager for Event Hubs.
@@ -17,8 +17,8 @@ public class EventHubManager extends AzureManager {
private final AzureResourceManager azureResourceManager;
- public RedisCacheManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) {
- super(azureProperties);
+ public RedisCacheManager(AzureResourceManager azureResourceManager, AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
this.azureResourceManager = azureResourceManager;
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java
index 60ffcdf9bc990..58b347e742406 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java
@@ -6,7 +6,7 @@
import com.azure.core.management.exception.ManagementException;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.resources.models.ResourceGroup;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
/**
* Resource manager for resource group.
@@ -15,8 +15,8 @@ public class ResourceGroupManager extends AzureManager {
private final AzureResourceManager azureResourceManager;
- public ResourceGroupManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) {
- super(azureProperties);
+ public ResourceGroupManager(AzureResourceManager azureResourceManager, AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
this.azureResourceManager = azureResourceManager;
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java
index 20975479fd148..3d97d432c8ca1 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java
@@ -6,7 +6,7 @@
import com.azure.core.management.exception.ManagementException;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
/**
* Resource manager for Service Bus namespace.
@@ -15,8 +15,8 @@ public class ServiceBusNamespaceManager extends AzureManager> {
- public ServiceBusQueueManager(AzureProperties azureProperties) {
- super(azureProperties);
+ public ServiceBusQueueManager(AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
}
@Override
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java
index 0c21a4a7a80d7..4ed187cae4649 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java
@@ -6,16 +6,16 @@
import com.azure.core.management.exception.ManagementException;
import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace;
import com.azure.resourcemanager.servicebus.models.Topic;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
+import com.azure.spring.core.util.Tuple;
/**
* Resource manager for Service Bus topic.
*/
public class ServiceBusTopicManager extends AzureManager> {
- public ServiceBusTopicManager(AzureProperties azureProperties) {
- super(azureProperties);
+ public ServiceBusTopicManager(AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
}
@Override
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java
index e8872ca4b726c..b0cfe15bf5cf0 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java
@@ -6,8 +6,8 @@
import com.azure.core.management.exception.ManagementException;
import com.azure.resourcemanager.servicebus.models.ServiceBusSubscription;
import com.azure.resourcemanager.servicebus.models.Topic;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
+import com.azure.spring.core.util.Tuple;
/**
* Resource manager for Service Bus topic subscription.
@@ -15,8 +15,8 @@
public class ServiceBusTopicSubscriptionManager extends AzureManager> {
- public ServiceBusTopicSubscriptionManager(AzureProperties azureProperties) {
- super(azureProperties);
+ public ServiceBusTopicSubscriptionManager(AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
}
@Override
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java
index 6156402f00b40..5b622e198eea7 100644
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java
+++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java
@@ -6,7 +6,7 @@
import com.azure.core.management.exception.ManagementException;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.storage.models.StorageAccount;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import javax.annotation.Nonnull;
@@ -17,8 +17,8 @@ public class StorageAccountManager extends AzureManager
private final AzureResourceManager azureResourceManager;
- public StorageAccountManager(@Nonnull AzureResourceManager azureResourceManager, AzureProperties azureProperties) {
- super(azureProperties);
+ public StorageAccountManager(@Nonnull AzureResourceManager azureResourceManager, AzureContextProperties azureContextProperties) {
+ super(azureContextProperties);
this.azureResourceManager = azureResourceManager;
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java
deleted file mode 100644
index f09987a72a226..0000000000000
--- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-package com.azure.spring.cloud.context.core.util;
-
-/**
- * The User Agent constants.
- */
-public class Constants {
-
- // for the User-Agent header set in track2 SDKs
- private static final String SNAPSHOT_VERSION = "snapshot";
- private static final String AZURE = "az";
- private static final String SPRING_CLOUD = "sc";
- private static final String SPRING_STREAMS = "ss";
- private static final String SPRING_INTEGRATION = "si";
- private static final String KEY_VAULT = "kv";
- private static final String STORAGE_BLOBS = "sb";
- private static final String STORAGE_FILE_SHARE = "sf";
- private static final String STORAGE_QUEUE = "sq";
- private static final String EVENT_HUB = "eh";
- private static final String SERVICE_BUS = "bus";
- private static final String APP_CONFIGURATION = "cfg";
-
-
- public static final String SPRING_CLOUD_VERSION = SNAPSHOT_VERSION;
-
- // the max length of application id is 24
- public static final String SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID =
- String.join("-", AZURE, SPRING_INTEGRATION, STORAGE_QUEUE) + "/" + SPRING_CLOUD_VERSION;
-
- public static final String SPRING_EVENT_HUB_APPLICATION_ID =
- String.join("-", AZURE, SPRING_CLOUD, EVENT_HUB) + "/" + SPRING_CLOUD_VERSION;
-}
diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java
index 38659a3279756..576c2224ded4b 100644
--- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java
@@ -3,11 +3,9 @@
package com.azure.spring.cloud.autoconfigure.context;
-import com.azure.core.management.AzureEnvironment;
import com.azure.core.management.profile.AzureProfile;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.context.core.api.CredentialsProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
@@ -16,8 +14,8 @@
import org.springframework.context.annotation.Configuration;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
public class AzureContextAutoConfigurationTest {
@@ -28,13 +26,13 @@ public class AzureContextAutoConfigurationTest {
@Test
public void testAzureDisabled() {
- this.contextRunner.run(context -> assertThat(context).doesNotHaveBean(AzureProperties.class));
+ this.contextRunner.run(context -> assertThat(context).doesNotHaveBean(AzureContextProperties.class));
}
@Test
public void testWithoutAzureClass() {
this.contextRunner.withClassLoader(new FilteredClassLoader(AzureResourceManager.class))
- .run(context -> assertThat(context).doesNotHaveBean(AzureProperties.class));
+ .run(context -> assertThat(context).doesNotHaveBean(AzureContextProperties.class));
}
@Test
@@ -42,7 +40,7 @@ public void testLocationRequiredWhenAutoCreateResources() {
this.contextRunner.withPropertyValues(AZURE_PROPERTY_PREFIX + "resourceGroup=group1")
.withPropertyValues(AZURE_PROPERTY_PREFIX + "auto-create-resources=true")
.run(context -> assertThrows(IllegalStateException.class,
- () -> context.getBean(AzureProperties.class)));
+ () -> context.getBean(AzureContextProperties.class)));
}
@Test
@@ -56,15 +54,13 @@ public void testAzurePropertiesConfigured() {
AZURE_PROPERTY_PREFIX + "region=region1",
AZURE_PROPERTY_PREFIX + "subscriptionId=sub1")
.run(context -> {
- assertThat(context).hasSingleBean(AzureProperties.class);
- assertThat(context.getBean(AzureProperties.class).getClientId()).isEqualTo("client1");
- assertThat(context.getBean(AzureProperties.class).getClientSecret()).isEqualTo("secret1");
- assertThat(context.getBean(AzureProperties.class).getTenantId()).isEqualTo("tenant1");
- assertThat(context.getBean(AzureProperties.class).getResourceGroup()).isEqualTo("rg1");
- assertThat(context.getBean(AzureProperties.class).getRegion()).isEqualTo("region1");
- assertThat(context.getBean(AzureProperties.class).getSubscriptionId()).isEqualTo("sub1");
- assertThat(context.getBean(AzureProperties.class).getEnvironment().getAzureEnvironment())
- .isEqualTo(AzureEnvironment.AZURE);
+ assertThat(context).hasSingleBean(AzureContextProperties.class);
+ assertThat(context.getBean(AzureContextProperties.class).getClientId()).isEqualTo("client1");
+ assertThat(context.getBean(AzureContextProperties.class).getClientSecret()).isEqualTo("secret1");
+ assertThat(context.getBean(AzureContextProperties.class).getTenantId()).isEqualTo("tenant1");
+ assertThat(context.getBean(AzureContextProperties.class).getResourceGroup()).isEqualTo("rg1");
+ assertThat(context.getBean(AzureContextProperties.class).getRegion()).isEqualTo("region1");
+ assertThat(context.getBean(AzureContextProperties.class).getSubscriptionId()).isEqualTo("sub1");
});
}
@@ -73,7 +69,7 @@ public void testAutoConfigureEnabled() {
this.contextRunner.withPropertyValues(AZURE_PROPERTY_PREFIX + "resource-group=rg1")
.withUserConfiguration(TestConfigurationWithResourceManager.class)
.run(context -> {
- assertThat(context).hasSingleBean(AzureProperties.class);
+ assertThat(context).hasSingleBean(AzureContextProperties.class);
assertThat(context).hasSingleBean(AzureProfile.class);
});
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java
index f0683dadfed6f..4b205824b2a04 100644
--- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java
+++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java
@@ -3,13 +3,10 @@
package com.azure.spring.cloud.autoconfigure.context;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
import com.azure.core.management.AzureEnvironment;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.context.core.api.CredentialsProvider;
import com.azure.spring.cloud.context.core.api.EnvironmentProvider;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -17,6 +14,9 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
public class AzureEnvironmentConfigurationTest {
private static final String AZURE_PROPERTY_PREFIX = "spring.cloud.azure.";
@@ -46,7 +46,7 @@ public void testWithAnotherEnvironment() {
@Configuration
- @EnableConfigurationProperties(AzureProperties.class)
+ @EnableConfigurationProperties(AzureContextProperties.class)
static class TestConfigurationWithProperty {
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java
index 7765b741eb2f0..33fce79d1510f 100644
--- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java
+++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java
@@ -5,14 +5,15 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import static com.azure.spring.cloud.context.core.util.Constants.SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_QUEUE;
+import static com.azure.spring.core.ApplicationId.VERSION;
public class ApplicationIdTest {
@Test
public void maxLength() {
- Assertions.assertTrue(SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID.length() <= 24);
+ Assertions.assertTrue((AZURE_SPRING_STORAGE_QUEUE + VERSION).length() <= 24);
}
}
diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java
index 2ada36b0cc16a..533106a7664d2 100644
--- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java
+++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java
@@ -5,8 +5,8 @@
import static org.mockito.Mockito.*;
-import com.azure.spring.cloud.context.core.util.Memoizer;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Memoizer;
+import com.azure.spring.core.util.Tuple;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
diff --git a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java b/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java
index 1bfa8d45a01ad..c049a94ff5cb8 100644
--- a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java
+++ b/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java
@@ -22,7 +22,7 @@ public class AzureStorageProperties {
private String account;
private String accessKey;
-
+
private String resourceGroup;
public String getAccount() {
@@ -44,7 +44,7 @@ public void setAccessKey(String accessKey) {
public String getResourceGroup() {
return resourceGroup;
}
-
+
public void setResourceGroup(String resourceGroup) {
this.resourceGroup = resourceGroup;
}
diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java
index afa52d04fa2ab..3687afeffe39d 100644
--- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java
+++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java
@@ -5,11 +5,11 @@
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration;
+import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties;
import com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration;
import com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubAutoConfiguration;
import com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubProperties;
import com.azure.spring.cloud.autoconfigure.eventhub.EventHubUtils;
-import com.azure.spring.cloud.context.core.config.AzureProperties;
import com.azure.spring.cloud.context.core.impl.EventHubConsumerGroupManager;
import com.azure.spring.cloud.context.core.impl.EventHubManager;
import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager;
@@ -45,16 +45,16 @@ public class EventHubBinderConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(EventHubNamespaceManager.class)
- public EventHubManager eventHubManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) {
- return new EventHubManager(azureResourceManager, azureProperties);
+ public EventHubManager eventHubManager(AzureResourceManager azureResourceManager, AzureContextProperties azureContextProperties) {
+ return new EventHubManager(azureResourceManager, azureContextProperties);
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(EventHubNamespaceManager.class)
public EventHubConsumerGroupManager eventHubConsumerGroupManager(AzureResourceManager azureResourceManager,
- AzureProperties azureProperties) {
- return new EventHubConsumerGroupManager(azureResourceManager, azureProperties);
+ AzureContextProperties azureContextProperties) {
+ return new EventHubConsumerGroupManager(azureResourceManager, azureContextProperties);
}
@Bean
diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java
index 7fee8356d4a78..41c63a65e074a 100644
--- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java
+++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java
@@ -8,7 +8,7 @@
import com.azure.spring.cloud.context.core.impl.EventHubConsumerGroupManager;
import com.azure.spring.cloud.context.core.impl.EventHubManager;
import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import org.springframework.cloud.stream.provisioning.ProvisioningException;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java
index 66896af6d3561..1f7fd898bef79 100644
--- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java
+++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java
@@ -7,7 +7,7 @@
import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace;
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import org.springframework.cloud.stream.provisioning.ProvisioningException;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java
index 26d8cca260759..cbd8a300e22e6 100644
--- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java
+++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java
@@ -8,7 +8,7 @@
import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager;
import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import org.springframework.cloud.stream.provisioning.ProvisioningException;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java
index 6787551838267..f675fb7b35979 100644
--- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java
+++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java
@@ -11,8 +11,8 @@
import com.azure.messaging.eventhubs.EventProcessorClient;
import com.azure.messaging.eventhubs.EventProcessorClientBuilder;
import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore;
-import com.azure.spring.cloud.context.core.util.Memoizer;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Memoizer;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.eventhub.api.EventHubClientFactory;
import com.azure.spring.integration.eventhub.impl.EventHubProcessor;
import com.azure.storage.blob.BlobContainerAsyncClient;
@@ -31,7 +31,8 @@
import java.util.function.Consumer;
import java.util.function.Function;
-import static com.azure.spring.cloud.context.core.util.Constants.SPRING_EVENT_HUB_APPLICATION_ID;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_EVENT_HUB;
+import static com.azure.spring.core.ApplicationId.VERSION;
/**
* Default implementation of {@link EventHubClientFactory}.
@@ -72,14 +73,14 @@ private EventHubConsumerAsyncClient createEventHubClient(String eventHubName, St
return new EventHubClientBuilder()
.connectionString(eventHubConnectionString, eventHubName)
.consumerGroup(consumerGroup)
- .clientOptions(new ClientOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID))
+ .clientOptions(new ClientOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION))
.buildAsyncConsumerClient();
}
private EventHubProducerAsyncClient createProducerClient(String eventHubName) {
return new EventHubClientBuilder()
.connectionString(eventHubConnectionString, eventHubName)
- .clientOptions(new ClientOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID))
+ .clientOptions(new ClientOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION))
.buildAsyncProducerClient();
}
@@ -93,7 +94,7 @@ private EventProcessorClient createEventProcessorClientInternal(String eventHubN
BlobContainerAsyncClient blobClient = new BlobContainerClientBuilder()
.connectionString(checkpointStorageConnectionString)
.containerName(containerName)
- .httpLogOptions(new HttpLogOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID))
+ .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION))
.buildAsyncClient();
final Boolean isContainerExist = blobClient.exists().block();
diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java
index 0e1b24e60e200..4aa10c4050849 100644
--- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java
+++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java
@@ -3,7 +3,7 @@
package com.azure.spring.integration.eventhub.impl;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.core.api.PartitionSupplier;
import com.azure.spring.integration.eventhub.api.EventHubClientFactory;
import com.azure.spring.integration.eventhub.api.EventHubRxOperation;
diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java
index cab77e09699a8..40d67bd1ffeff 100644
--- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java
+++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java
@@ -3,7 +3,7 @@
package com.azure.spring.integration.eventhub.impl;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.eventhub.api.EventHubClientFactory;
import com.azure.spring.integration.eventhub.api.EventHubOperation;
import org.slf4j.Logger;
diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java
index ad52b686622e3..8be28600b7121 100644
--- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java
+++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java
@@ -4,7 +4,7 @@
package com.azure.spring.integration.eventhub.support;
import com.azure.messaging.eventhubs.models.EventContext;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.core.api.PartitionSupplier;
import com.azure.spring.integration.eventhub.api.EventHubClientFactory;
import com.azure.spring.integration.eventhub.api.EventHubRxOperation;
diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java
index 6a4064eebe565..3fa3d862dd949 100644
--- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java
+++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java
@@ -10,7 +10,7 @@
import com.azure.messaging.servicebus.ServiceBusReceivedMessageContext;
import com.azure.messaging.servicebus.ServiceBusSenderAsyncClient;
import com.azure.messaging.servicebus.models.ServiceBusReceiveMode;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.servicebus.ServiceBusClientConfig;
import com.azure.spring.integration.servicebus.ServiceBusMessageProcessor;
diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java
index dffb1dc6f9113..b4ce22f819d3a 100644
--- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java
+++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java
@@ -4,7 +4,7 @@
package com.azure.spring.integration.servicebus.topic;
import com.azure.messaging.servicebus.ServiceBusProcessorClient;
-import com.azure.spring.cloud.context.core.util.Tuple;
+import com.azure.spring.core.util.Tuple;
import com.azure.spring.integration.servicebus.DefaultServiceBusMessageProcessor;
import com.azure.spring.integration.servicebus.ServiceBusClientConfig;
import com.azure.spring.integration.servicebus.ServiceBusRuntimeException;
diff --git a/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java b/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java
index 0e89afbc6a1ae..f2e462c76642e 100644
--- a/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java
+++ b/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java
@@ -3,8 +3,9 @@
package com.azure.spring.integration.storage.queue.factory;
+import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.http.policy.HttpLogOptions;
-import com.azure.spring.cloud.context.core.util.Memoizer;
+import com.azure.spring.core.util.Memoizer;
import com.azure.storage.queue.QueueAsyncClient;
import com.azure.storage.queue.QueueClientBuilder;
import org.slf4j.Logger;
@@ -13,7 +14,8 @@
import java.util.function.Function;
-import static com.azure.spring.cloud.context.core.util.Constants.SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID;
+import static com.azure.spring.core.ApplicationId.VERSION;
+import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_QUEUE;
/**
* Default client factory for Storage Queue.
@@ -22,9 +24,15 @@ public class DefaultStorageQueueClientFactory implements StorageQueueClientFacto
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultStorageQueueClientFactory.class);
private final String connectionString;
private final Function queueClientCreator = Memoizer.memoize(this::createQueueClient);
+ private final HttpLogDetailLevel httpLogDetailLevel;
public DefaultStorageQueueClientFactory(@NonNull String connectionString) {
+ this(connectionString, HttpLogDetailLevel.NONE);
+ }
+
+ public DefaultStorageQueueClientFactory(@NonNull String connectionString, HttpLogDetailLevel httpLogDetailLevel) {
this.connectionString = connectionString;
+ this.httpLogDetailLevel = httpLogDetailLevel;
}
@Override
@@ -36,7 +44,9 @@ private QueueAsyncClient createQueueClient(String queueName) {
final QueueAsyncClient queueClient = new QueueClientBuilder()
.connectionString(this.connectionString)
.queueName(queueName)
- .httpLogOptions(new HttpLogOptions().setApplicationId(SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID))
+ .httpLogOptions(new HttpLogOptions()
+ .setApplicationId(AZURE_SPRING_STORAGE_QUEUE + VERSION)
+ .setLogLevel(httpLogDetailLevel))
.buildAsyncClient();
// TODO (xiada): when used with connection string, this call will throw exception
diff --git a/sdk/spring/ci.yml b/sdk/spring/ci.yml
index f46c3deda3721..8281144810333 100644
--- a/sdk/spring/ci.yml
+++ b/sdk/spring/ci.yml
@@ -27,9 +27,9 @@ extends:
parameters:
ServiceDirectory: spring
Artifacts:
- - name: azure-identity-spring
+ - name: azure-spring-boot-core
groupId: com.azure.spring
- safeName: azureidentityspring
+ safeName: azurespringbootcore
- name: azure-spring-boot
groupId: com.azure.spring
safeName: azurespringboot
diff --git a/sdk/spring/pom.xml b/sdk/spring/pom.xml
index d8a81dce8c03f..ca516bfacf8dd 100644
--- a/sdk/spring/pom.xml
+++ b/sdk/spring/pom.xml
@@ -13,7 +13,7 @@
coverage
- azure-identity-spring
+ azure-spring-boot-core
azure-spring-boot
azure-spring-cloud-autoconfigure
azure-spring-cloud-context
@@ -31,8 +31,8 @@
com.azure.spring
- azure-identity-spring
- 1.7.0-beta.1
+ azure-spring-boot-core
+ 1.0.0-beta.1
com.azure.spring
@@ -129,7 +129,7 @@
true
- azure-identity-spring
+ azure-spring-boot-core
azure-spring-boot
azure-spring-boot-starter
azure-spring-boot-starter-active-directory
diff --git a/sdk/spring/spring-test-template.yml b/sdk/spring/spring-test-template.yml
index 2a2889a226e12..d751bb505931c 100644
--- a/sdk/spring/spring-test-template.yml
+++ b/sdk/spring/spring-test-template.yml
@@ -10,8 +10,6 @@ parameters:
- spring/azure-spring-boot-test-storage
- spring/azure-spring-cloud-test-eventhubs
- spring/azure-spring-cloud-test-servicebus-binder
- - spring/azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-binder
- - spring/azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-kafka
Artifacts:
- name: azure-spring-boot-test-application
groupId: com.azure.spring
@@ -58,12 +56,6 @@ parameters:
- name: azure-spring-boot-test-storage
groupId: com.azure.spring
safeName: azurespringbootteststorage
- - name: azure-spring-cloud-sample-eventhubs-binder
- groupId: com.azure.spring
- safeName: azurespringcloudsampleeventhubsbinder
- - name: azure-spring-cloud-sample-eventhubs-kafka
- groupId: com.azure.spring
- safeName: azurespringcloudsampleeventhubskafka
- name: azure-spring-cloud-test-servicebus-binder
groupId: com.azure.spring
safeName: azurespringcloudtestservicebusbinder