From 83c35d1e9794312e3acda76a71a7472dfb1492d9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 10 Sep 2025 20:08:08 +0000
Subject: [PATCH 1/2] Initial plan
From 30ba75829167c24d7cb708805b264e174a3e56e9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 10 Sep 2025 20:19:30 +0000
Subject: [PATCH 2/2] Complete Azure Managed Identity migration for
mi-azuresql-spring
Co-authored-by: richposada <454664+richposada@users.noreply.github.com>
---
mi-sql-public-demo/dependency-reduced-pom.xml | 56 +++++++++++++++++++
.../src/main/java/com/example/MainSQL.java | 29 +++++++++-
.../src/main/resources/application.properties | 2 +-
3 files changed, 85 insertions(+), 2 deletions(-)
create mode 100644 mi-sql-public-demo/dependency-reduced-pom.xml
diff --git a/mi-sql-public-demo/dependency-reduced-pom.xml b/mi-sql-public-demo/dependency-reduced-pom.xml
new file mode 100644
index 0000000..9a8898f
--- /dev/null
+++ b/mi-sql-public-demo/dependency-reduced-pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+ com.example
+ demo
+ 1.0-SNAPSHOT
+
+
+
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+
+
+ com.example.MainSQL
+
+
+
+
+ *:*
+
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+
+
+
+
+
+
+ com.azure.spring
+ spring-cloud-azure-dependencies
+ 5.22.0
+ pom
+ import
+
+
+
+
+ 17
+ 17
+ 17
+
+
diff --git a/mi-sql-public-demo/src/main/java/com/example/MainSQL.java b/mi-sql-public-demo/src/main/java/com/example/MainSQL.java
index 5a8f9a5..e26dcb1 100644
--- a/mi-sql-public-demo/src/main/java/com/example/MainSQL.java
+++ b/mi-sql-public-demo/src/main/java/com/example/MainSQL.java
@@ -11,6 +11,29 @@
public class MainSQL {
+ /**
+ * Resolves environment variable placeholders in the format ${VAR_NAME}
+ */
+ private static String resolveEnvironmentVariables(String input) {
+ if (input == null) {
+ return null;
+ }
+
+ String result = input;
+ java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\$\\{([^}]+)\\}");
+ java.util.regex.Matcher matcher = pattern.matcher(input);
+
+ while (matcher.find()) {
+ String envVar = matcher.group(1);
+ String envValue = System.getenv(envVar);
+ if (envValue != null) {
+ result = result.replace("${" + envVar + "}", envValue);
+ }
+ }
+
+ return result;
+ }
+
public static void main(String[] args) {
@@ -30,8 +53,12 @@ public static void main(String[] args) {
String connString = properties.getProperty("AZURE_SQLDB_CONNECTIONSTRING");
String clientId = properties.getProperty("AZURE_CLIENT_ID");
+ // Resolve environment variables in connection string
+ connString = resolveEnvironmentVariables(connString);
+ clientId = resolveEnvironmentVariables(clientId);
+
connString = connString + ";msiClientId=" + clientId + ";authentication=ActiveDirectoryMSI";
- System.out.print(connString);
+ System.out.println("Connection string: " + connString);
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connString);
diff --git a/mi-sql-public-demo/src/main/resources/application.properties b/mi-sql-public-demo/src/main/resources/application.properties
index ed7d015..d4813cc 100644
--- a/mi-sql-public-demo/src/main/resources/application.properties
+++ b/mi-sql-public-demo/src/main/resources/application.properties
@@ -1,5 +1,5 @@
AZURE_SQLDB_CONNECTIONSTRING=jdbc:sqlserver://${AZ_DATABASE_SERVER_NAME}.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
-AZURE_CLIENT_ID=
+AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
# Enable Azure managed identity for Spring Cloud Azure
spring.cloud.azure.credential.managed-identity-enabled=true