From 37dab87c1bbc74532881b5ced7fc212eb3d7c825 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 00:09:56 +0900 Subject: [PATCH 1/4] test(config): prove modern aliases after config data --- ...nfigAliasEnvironmentPostProcessorTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/etl-service/src/test/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java b/etl-service/src/test/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java index 285b24d7..b3f1ca43 100644 --- a/etl-service/src/test/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java +++ b/etl-service/src/test/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java @@ -1,8 +1,17 @@ package com.xtrmetl.etl.config; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.springframework.boot.Banner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Configuration; import org.springframework.mock.env.MockEnvironment; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -66,8 +75,41 @@ void modernValueWinsWhenBothNamespacesAreSet() { assertEquals("4096", aliases.get("xtrmetl.etl.max-payload-bytes")); } + @Test + void modernConfigDataWinsOverLegacyConfigData(@TempDir Path tempDir) throws IOException { + Path configFile = tempDir.resolve("application.properties"); + Files.writeString(configFile, """ + mightyetl.etl.max-payload-bytes=4096 + xtrmetl.etl.max-payload-bytes=1024 + """); + + SpringApplication application = new SpringApplication(AliasOrderProbeConfiguration.class); + application.setBannerMode(Banner.Mode.OFF); + application.setWebApplicationType(WebApplicationType.NONE); + + try (ConfigurableApplicationContext context = application.run( + "--spring.config.location=" + configFile.toUri() + )) { + assertTrue(context.getEnvironment().getPropertySources().contains( + MightyEtlConfigAliasEnvironmentPostProcessor.PROPERTY_SOURCE_NAME + )); + assertEquals( + "4096", + context.getEnvironment().getProperty("mightyetl.etl.max-payload-bytes") + ); + assertEquals( + "4096", + context.getEnvironment().getProperty("xtrmetl.etl.max-payload-bytes") + ); + } + } + @Test void emptyWhenUnset() { assertTrue(MightyEtlConfigAliasEnvironmentPostProcessor.buildAliases(new MockEnvironment()).isEmpty()); } + + @Configuration(proxyBeanMethods = false) + static class AliasOrderProbeConfiguration { + } } From 3e9cf4b86d9db75dd7b4b451524f6a3982a777cf Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 00:14:23 +0900 Subject: [PATCH 2/4] test(config): cover CDC config-data alias ordering --- ...nfigAliasEnvironmentPostProcessorTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/cdc-service/src/test/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java b/cdc-service/src/test/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java index e006da01..a955b63a 100644 --- a/cdc-service/src/test/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java +++ b/cdc-service/src/test/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessorTest.java @@ -1,8 +1,17 @@ package com.xtrmetl.cdc.config; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.springframework.boot.Banner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Configuration; import org.springframework.mock.env.MockEnvironment; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -34,10 +43,37 @@ void legacyOnlyIsMirroredToModern() { assertFalse(aliases.containsKey("xtrmetl.replica.enabled")); } + @Test + void modernConfigDataWinsOverLegacyConfigData(@TempDir Path tempDir) throws IOException { + Path configFile = tempDir.resolve("application.properties"); + Files.writeString(configFile, """ + mightyetl.cdc.autostart=false + xtrmetl.cdc.autostart=true + """); + + SpringApplication application = new SpringApplication(AliasOrderProbeConfiguration.class); + application.setBannerMode(Banner.Mode.OFF); + application.setWebApplicationType(WebApplicationType.NONE); + + try (ConfigurableApplicationContext context = application.run( + "--spring.config.location=" + configFile.toUri() + )) { + assertTrue(context.getEnvironment().getPropertySources().contains( + MightyEtlConfigAliasEnvironmentPostProcessor.PROPERTY_SOURCE_NAME + )); + assertEquals("false", context.getEnvironment().getProperty("mightyetl.cdc.autostart")); + assertEquals("false", context.getEnvironment().getProperty("xtrmetl.cdc.autostart")); + } + } + @Test void emptyWhenNeitherPrefixSet() { MockEnvironment env = new MockEnvironment(); Map aliases = MightyEtlConfigAliasEnvironmentPostProcessor.buildAliases(env); assertTrue(aliases.isEmpty()); } + + @Configuration(proxyBeanMethods = false) + static class AliasOrderProbeConfiguration { + } } From 6ca6ae881ba95c42952f5cd2bffc621c54735845 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 00:40:16 +0900 Subject: [PATCH 3/4] fix(config): register alias environment processors --- cdc-service/src/main/resources/META-INF/spring.factories | 2 ++ etl-service/src/main/resources/META-INF/spring.factories | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 cdc-service/src/main/resources/META-INF/spring.factories create mode 100644 etl-service/src/main/resources/META-INF/spring.factories diff --git a/cdc-service/src/main/resources/META-INF/spring.factories b/cdc-service/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..3e9eddc7 --- /dev/null +++ b/cdc-service/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ +com.xtrmetl.cdc.config.MightyEtlConfigAliasEnvironmentPostProcessor diff --git a/etl-service/src/main/resources/META-INF/spring.factories b/etl-service/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..04bd65b4 --- /dev/null +++ b/etl-service/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ +com.xtrmetl.etl.config.MightyEtlConfigAliasEnvironmentPostProcessor From 6d40912102edbae26a5907b0ea2fd4bbe51a7b8c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 00:43:41 +0900 Subject: [PATCH 4/4] fix(config): run aliases after config data --- .../config/MightyEtlConfigAliasEnvironmentPostProcessor.java | 4 ++-- .../config/MightyEtlConfigAliasEnvironmentPostProcessor.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cdc-service/src/main/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessor.java b/cdc-service/src/main/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessor.java index 1c1253b4..9a312f3e 100644 --- a/cdc-service/src/main/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessor.java +++ b/cdc-service/src/main/java/com/xtrmetl/cdc/config/MightyEtlConfigAliasEnvironmentPostProcessor.java @@ -1,8 +1,8 @@ package com.xtrmetl.cdc.config; import org.springframework.boot.SpringApplication; +import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; @@ -24,7 +24,7 @@ * *

Not a full recursive alias of every key — only known product properties.

*/ -@Order(Ordered.HIGHEST_PRECEDENCE + 10) +@Order(ConfigDataEnvironmentPostProcessor.ORDER + 1) public class MightyEtlConfigAliasEnvironmentPostProcessor implements EnvironmentPostProcessor { public static final String PROPERTY_SOURCE_NAME = "mightyetl-xtrmetl-aliases"; diff --git a/etl-service/src/main/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessor.java b/etl-service/src/main/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessor.java index 5462db4b..db9e1214 100644 --- a/etl-service/src/main/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessor.java +++ b/etl-service/src/main/java/com/xtrmetl/etl/config/MightyEtlConfigAliasEnvironmentPostProcessor.java @@ -1,8 +1,8 @@ package com.xtrmetl.etl.config; import org.springframework.boot.SpringApplication; +import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; @@ -18,7 +18,7 @@ *

Only explicitly supported product keys are mirrored. See * {@code docs/rebrand-name-matrix.md} for compatibility boundaries.

*/ -@Order(Ordered.HIGHEST_PRECEDENCE + 10) +@Order(ConfigDataEnvironmentPostProcessor.ORDER + 1) public class MightyEtlConfigAliasEnvironmentPostProcessor implements EnvironmentPostProcessor { /** Name of the highest-precedence synthetic alias property source. */