diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e92c8b79..2335e4f51 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,3 +3,4 @@
- [feat: upgrade springdoc to 1.8.0.](https://github.com/Tencent/spring-cloud-tencent/pull/1737)
- [refactor:optimize auto configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1740)
+- [refactor:optimize config locate.](https://github.com/Tencent/spring-cloud-tencent/pull/1742)
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFileLocator.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFileLocator.java
index 23d8ae67b..f4e31650c 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFileLocator.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFileLocator.java
@@ -17,20 +17,14 @@
package com.tencent.cloud.polaris.config.adapter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
import java.util.List;
-import com.tencent.cloud.common.util.EnvironmentUtils;
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils;
-import com.tencent.polaris.configuration.api.core.ConfigFileMetadata;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
-import com.tencent.polaris.configuration.client.internal.DefaultConfigFileMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,9 +34,6 @@ import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.PropertySource;
-import static com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils.loadGroupPolarisPropertySource;
-import static com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils.loadPolarisPropertySource;
-
/**
* Spring cloud reserved core configuration loading SPI.
*
@@ -60,6 +51,7 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
private final PolarisConfigProperties polarisConfigProperties;
private final PolarisContextProperties polarisContextProperties;
private final ConfigFileService configFileService;
+ private final PolarisConfigFilePuller puller;
private final Environment environment;
// this class provides customized logic for some customers to configure special business group files
private final PolarisConfigCustomExtensionLayer polarisConfigCustomExtensionLayer = PolarisServiceLoaderUtil.getPolarisConfigCustomExtensionLayer();
@@ -69,6 +61,7 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
this.polarisConfigProperties = polarisConfigProperties;
this.polarisContextProperties = polarisContextProperties;
this.configFileService = configFileService;
+ this.puller = PolarisConfigFilePuller.get(polarisContextProperties, configFileService);
this.environment = environment;
}
@@ -94,10 +87,7 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
// load spring boot default config files
initInternalConfigFiles(compositePropertySource);
// load custom config files
- List configFileGroups = polarisConfigProperties.getGroups();
- if (CollectionUtils.isNotEmpty(configFileGroups)) {
- initCustomPolarisConfigFiles(compositePropertySource, configFileGroups);
- }
+ initCustomPolarisConfigFiles(compositePropertySource);
// load tsf default config group
initTsfConfigGroups(compositePropertySource);
return compositePropertySource;
@@ -129,142 +119,24 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
if (!polarisConfigProperties.isInternalEnabled()) {
return;
}
- List internalConfigFiles = getInternalConfigFiles();
-
- for (ConfigFileMetadata configFile : internalConfigFiles) {
- if (StringUtils.isEmpty(configFile.getFileGroup())) {
- continue;
- }
- PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(configFileService, configFile.getNamespace(), configFile.getFileGroup(), configFile.getFileName());
-
- compositePropertySource.addPropertySource(polarisPropertySource);
-
- PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
-
- LOGGER.info("[SCT Config] Load and inject polaris config file. file = {}", configFile);
- }
- }
-
- private List getInternalConfigFiles() {
- String namespace = polarisContextProperties.getNamespace();
- String serviceName = polarisContextProperties.getService();
- if (StringUtils.isBlank(serviceName)) {
- serviceName = environment.getProperty("spring.application.name");
- }
-
- List internalConfigFiles = new LinkedList<>();
-
// priority: application-${profile} > application > boostrap-${profile} > boostrap
String[] activeProfiles = environment.getActiveProfiles();
String[] defaultProfiles = environment.getDefaultProfiles();
- List profileList = new ArrayList<>();
- if (CollectionUtils.isNotEmpty(activeProfiles)) {
- profileList.addAll(Arrays.asList(activeProfiles));
- }
- else if (CollectionUtils.isNotEmpty(defaultProfiles)) {
- profileList.addAll(Arrays.asList(defaultProfiles));
- }
- // build application config files
- buildInternalApplicationConfigFiles(internalConfigFiles, namespace, serviceName, profileList);
- // build bootstrap config files
- buildInternalBootstrapConfigFiles(internalConfigFiles, namespace, serviceName, profileList);
-
- return internalConfigFiles;
- }
-
- private void buildInternalApplicationConfigFiles(List internalConfigFiles, String namespace, String serviceName, List profileList) {
- for (String profile : profileList) {
- if (StringUtils.isBlank(profile)) {
- continue;
- }
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application-" + profile + ".properties"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application-" + profile + ".yml"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application-" + profile + ".yaml"));
- }
- // build default config properties files.
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application.properties"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application.yml"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "application.yaml"));
- }
-
- private void buildInternalBootstrapConfigFiles(List internalConfigFiles, String namespace, String serviceName, List profileList) {
- for (String profile : profileList) {
- if (StringUtils.isBlank(profile)) {
- continue;
- }
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap-" + profile + ".properties"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap-" + profile + ".yml"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap-" + profile + ".yaml"));
+ String serviceName = polarisContextProperties.getService();
+ if (StringUtils.isBlank(serviceName)) {
+ serviceName = environment.getProperty("spring.application.name");
}
- // build default config properties files.
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap.properties"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap.yml"));
- internalConfigFiles.add(new DefaultConfigFileMetadata(namespace, serviceName, "bootstrap.yaml"));
+ this.puller.initInternalConfigFiles(compositePropertySource, activeProfiles, defaultProfiles, serviceName);
}
- void initTsfConfigGroups(CompositePropertySource compositePropertySource) {
- String tsfId = environment.getProperty("tsf_id");
- String tsfNamespaceName = environment.getProperty("tsf_namespace_name");
- String tsfGroupName = environment.getProperty("tsf_group_name");
-
- if (StringUtils.isEmpty(tsfNamespaceName) || StringUtils.isEmpty(tsfGroupName)) {
- return;
- }
- String namespace = polarisContextProperties.getNamespace();
- List tsfConfigGroups = new ArrayList<>();
- tsfConfigGroups.add((StringUtils.isNotBlank(tsfId) ? tsfId + "." : "") + tsfGroupName + ".application_config_group");
- tsfConfigGroups.add((StringUtils.isNotBlank(tsfId) ? tsfId + "." : "") + tsfNamespaceName + ".global_config_group");
-
- if (EnvironmentUtils.isGateway()) {
- tsfConfigGroups.add((StringUtils.isNotBlank(tsfId) ? tsfId + "." : "") + tsfGroupName + ".gateway_config_group");
- }
- for (String tsfConfigGroup : tsfConfigGroups) {
- PolarisPropertySource polarisPropertySource = loadGroupPolarisPropertySource(configFileService, namespace, tsfConfigGroup);
- if (polarisPropertySource == null) {
- // not register to polaris
- continue;
- }
- compositePropertySource.addPropertySource(polarisPropertySource);
- PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
+ private void initCustomPolarisConfigFiles(CompositePropertySource compositePropertySource) {
+ List configFileGroups = polarisConfigProperties.getGroups();
+ if (CollectionUtils.isNotEmpty(configFileGroups)) {
+ this.puller.initCustomPolarisConfigFiles(compositePropertySource, configFileGroups);
}
}
- private void initCustomPolarisConfigFiles(CompositePropertySource compositePropertySource, List configFileGroups) {
- String namespace = polarisContextProperties.getNamespace();
-
- for (ConfigFileGroup configFileGroup : configFileGroups) {
- String groupNamespace = configFileGroup.getNamespace();
- if (StringUtils.isBlank(groupNamespace)) {
- groupNamespace = namespace;
- }
-
- String group = configFileGroup.getName();
- if (StringUtils.isBlank(group)) {
- continue;
- }
-
- List files = configFileGroup.getFiles();
-
- if (CollectionUtils.isEmpty(files)) {
- PolarisPropertySource polarisPropertySource = loadGroupPolarisPropertySource(configFileService, namespace, group);
- if (polarisPropertySource == null) {
- continue;
- }
- compositePropertySource.addPropertySource(polarisPropertySource);
- PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
- LOGGER.info("[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}", namespace, group);
- }
- else {
- for (String fileName : files) {
- PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(configFileService, groupNamespace, group, fileName);
-
- compositePropertySource.addPropertySource(polarisPropertySource);
-
- PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
-
- LOGGER.info("[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}, fileName = {}", groupNamespace, group, fileName);
- }
- }
- }
+ private void initTsfConfigGroups(CompositePropertySource compositePropertySource) {
+ this.puller.initTsfConfigGroups(compositePropertySource);
}
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePuller.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePuller.java
index c116d0621..a11881820 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePuller.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePuller.java
@@ -31,9 +31,11 @@ import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.configuration.api.core.ConfigFileMetadata;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
import com.tencent.polaris.configuration.client.internal.DefaultConfigFileMetadata;
+import org.apache.commons.logging.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.env.CompositePropertySource;
import static com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils.loadGroupPolarisPropertySource;
@@ -46,7 +48,9 @@ import static com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils.
*/
public final class PolarisConfigFilePuller {
- private static final Logger LOGGER = LoggerFactory.getLogger(PolarisConfigFileLocator.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(PolarisConfigFilePuller.class);
+
+ private static Log log;
private PolarisContextProperties polarisContextProperties;
@@ -55,6 +59,10 @@ public final class PolarisConfigFilePuller {
private PolarisConfigFilePuller() {
}
+ public static PolarisConfigFilePuller get(PolarisContextProperties polarisContextProperties, ConfigFileService configFileService) {
+ return get(polarisContextProperties, configFileService, null);
+ }
+
/**
* Factory method to create PolarisConfigFilePuller for
* {@link PolarisConfigDataLoader},{@link PolarisConfigFileLocator}.
@@ -63,13 +71,26 @@ public final class PolarisConfigFilePuller {
* @param configFileService configFileService
* @return PolarisConfigFilePuller instance
*/
- public static PolarisConfigFilePuller get(PolarisContextProperties polarisContextProperties, ConfigFileService configFileService) {
+ public static PolarisConfigFilePuller get(PolarisContextProperties polarisContextProperties,
+ ConfigFileService configFileService, DeferredLogFactory logFactory) {
PolarisConfigFilePuller puller = new PolarisConfigFilePuller();
puller.polarisContextProperties = polarisContextProperties;
puller.configFileService = configFileService;
+ if (logFactory != null) {
+ log = logFactory.getLog(PolarisConfigFilePuller.class);
+ }
return puller;
}
+ private static void logInfo(String msg) {
+ if (log != null) {
+ log.info(msg);
+ }
+ else {
+ LOGGER.info(msg);
+ }
+ }
+
/**
* InitInternalConfigFiles for {@link PolarisConfigDataLoader}.
*
@@ -80,13 +101,14 @@ public final class PolarisConfigFilePuller {
*/
public void initInternalConfigFiles(CompositePropertySource compositePropertySource, String[] activeProfiles,
String[] defaultProfiles, String serviceName) {
+ logInfo("[SCT Config] Loading polaris internal config files");
List internalConfigFiles = getInternalConfigFiles(activeProfiles, defaultProfiles, serviceName);
for (ConfigFileMetadata configFile : internalConfigFiles) {
PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(configFileService,
configFile.getNamespace(), configFile.getFileGroup(), configFile.getFileName());
compositePropertySource.addPropertySource(polarisPropertySource);
PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
- LOGGER.info("[SCT Config] Load and inject polaris config file. file = {}", configFile);
+ logInfo(String.format("[SCT Config] Load and inject polaris internal config file success. file = %s", configFile));
}
}
@@ -98,6 +120,7 @@ public final class PolarisConfigFilePuller {
*/
public void initCustomPolarisConfigFiles(CompositePropertySource compositePropertySource,
List configFileGroups) {
+ logInfo("[SCT Config] Loading polaris custom config files");
configFileGroups.forEach(
configFileGroup -> initCustomPolarisConfigFile(compositePropertySource, configFileGroup)
);
@@ -121,15 +144,21 @@ public final class PolarisConfigFilePuller {
}
List files = configFileGroup.getFiles();
if (CollectionUtils.isEmpty(files)) {
- return;
- }
- for (String fileName : files) {
- PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(configFileService, groupNamespace, group, fileName);
+ PolarisPropertySource polarisPropertySource = loadGroupPolarisPropertySource(configFileService, groupNamespace, group);
+ if (polarisPropertySource == null) {
+ return;
+ }
compositePropertySource.addPropertySource(polarisPropertySource);
PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
- LOGGER.info(
- "[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}, fileName = {}",
- groupNamespace, group, fileName);
+ logInfo(String.format("[SCT Config] Load and inject polaris custom group config file success. namespace = %s, group = %s", groupNamespace, group));
+ }
+ else {
+ for (String fileName : files) {
+ PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(configFileService, groupNamespace, group, fileName);
+ compositePropertySource.addPropertySource(polarisPropertySource);
+ PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
+ logInfo(String.format("[SCT Config] Load and inject polaris custom config file success. namespace = %s, group = %s, fileName = %s", groupNamespace, group, fileName));
+ }
}
}
@@ -145,6 +174,7 @@ public final class PolarisConfigFilePuller {
if (StringUtils.isEmpty(tsfNamespaceName) || StringUtils.isEmpty(tsfGroupName)) {
return;
}
+ logInfo("[SCT Config] Loading tsf config files");
String namespace = polarisContextProperties.getNamespace();
List tsfConfigGroups = new ArrayList<>();
tsfConfigGroups.add((StringUtils.isNotBlank(tsfId) ? tsfId + "." : "") + tsfGroupName + ".application_config_group");
@@ -161,6 +191,7 @@ public final class PolarisConfigFilePuller {
}
compositePropertySource.addPropertySource(polarisPropertySource);
PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
+ logInfo(String.format("[SCT Config] Load and inject tsf config file success. namespace = %s, group = %s", namespace, tsfConfigGroup));
}
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoader.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoader.java
index 5f2b2c3a4..c71d40931 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoader.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoader.java
@@ -28,12 +28,13 @@ import com.tencent.cloud.polaris.config.adapter.PolarisConfigFilePuller;
import com.tencent.cloud.polaris.config.adapter.PolarisServiceLoaderUtil;
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
+import com.tencent.polaris.api.utils.CollectionUtils;
+import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.client.api.SDKContext;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
import com.tencent.polaris.configuration.factory.ConfigFileServiceFactory;
import org.apache.commons.logging.Log;
-import org.springframework.boot.ConfigurableBootstrapContext;
import org.springframework.boot.context.config.ConfigData;
import org.springframework.boot.context.config.ConfigDataLoader;
import org.springframework.boot.context.config.ConfigDataLoaderContext;
@@ -42,8 +43,6 @@ import org.springframework.boot.context.config.Profiles;
import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.PropertySource;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
import static org.springframework.boot.context.config.ConfigData.Option.IGNORE_IMPORTS;
import static org.springframework.boot.context.config.ConfigData.Option.IGNORE_PROFILES;
@@ -61,13 +60,16 @@ public class PolarisConfigDataLoader implements ConfigDataLoader> propertySourceList = new ArrayList<>(compositePropertySource.getPropertySources());
Collections.reverse(propertySourceList);
return new ConfigData(propertySourceList, getOptions(resource));
}
- private CompositePropertySource locate(ConfigurableBootstrapContext bootstrapContext,
- PolarisConfigDataResource resource) {
+ private CompositePropertySource locate(PolarisConfigDataResource resource) {
CompositePropertySource compositePropertySource = new CompositePropertySource(
POLARIS_CONFIG_PROPERTY_SOURCE_NAME);
SDKContext sdkContext = PolarisConfigSDKContextManager.innerGetConfigSDKContext();
@@ -102,41 +103,76 @@ public class PolarisConfigDataLoader implements ConfigDataLoader mockedStatic = mockStatic(PolarisPropertySourceUtils.class)) {
- mockedStatic.when(() -> PolarisPropertySourceUtils.loadGroupPolarisPropertySource(
- eq(configFileService),
- eq(polarisNamespace),
- any()
- )).thenReturn(mockPropertySource);
-
- PolarisConfigFileLocator locator = new PolarisConfigFileLocator(
- polarisConfigProperties,
- polarisContextProperties,
- configFileService,
- environment
- );
- // Act
- locator.initTsfConfigGroups(compositePropertySource);
-
- // Verify
- List polarisPropertySources = PolarisPropertySourceManager.getAllPropertySources();
- assertThat(polarisPropertySources.stream().map(PolarisPropertySource::getPropertySourceName).
- filter(name -> name.equals(expectedAppConfigGroup)).count() == 1);
- }
- }
-
@Test
void testPolarisConfigProperties() {
PolarisConfigProperties testProperties = new PolarisConfigProperties();
diff --git a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePullerTest.java b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePullerTest.java
index 1d3a1b782..3ee200ba6 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePullerTest.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFilePullerTest.java
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Map;
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
+import com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils;
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
import com.tencent.polaris.configuration.api.core.ConfigKVFile;
@@ -30,11 +31,16 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.env.CompositePropertySource;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
/**
@@ -175,4 +181,44 @@ public class PolarisConfigFilePullerTest {
assertThat(compositePropertySource.getProperty("k2")).isEqualTo("v2");
assertThat(compositePropertySource.getProperty("k3")).isEqualTo("v3");
}
+
+ @Test
+ void testInitTsfConfigGroupsSuccessfulLoad() {
+ PolarisConfigFilePuller puller = PolarisConfigFilePuller.get(polarisContextProperties, configFileService);
+
+ // Arrange
+ String tsfId = "test-id";
+ String tsfNamespace = "test-namespace";
+ String tsfGroup = "test-group";
+ String polarisNamespace = "polaris-namespace";
+
+ System.setProperty("tsf_id", tsfId);
+ System.setProperty("tsf_namespace_name", tsfNamespace);
+ System.setProperty("tsf_group_name", tsfGroup);
+
+ when(polarisContextProperties.getNamespace()).thenReturn(polarisNamespace);
+
+ String expectedAppConfigGroup = tsfId + "." + tsfGroup + ".application_config_group";
+
+ // mock polaris config properties
+ PolarisPropertySource mockPropertySource = mock(PolarisPropertySource.class);
+ when(mockPropertySource.getPropertySourceName()).thenReturn(expectedAppConfigGroup);
+
+ CompositePropertySource compositePropertySource = mock(CompositePropertySource.class);
+ try (MockedStatic mockedStatic = mockStatic(PolarisPropertySourceUtils.class)) {
+ mockedStatic.when(() -> PolarisPropertySourceUtils.loadGroupPolarisPropertySource(
+ eq(configFileService),
+ eq(polarisNamespace),
+ any()
+ )).thenReturn(mockPropertySource);
+
+ // Act
+ puller.initTsfConfigGroups(compositePropertySource);
+
+ // Verify
+ List polarisPropertySources = PolarisPropertySourceManager.getAllPropertySources();
+ assertThat(polarisPropertySources.stream().map(PolarisPropertySource::getPropertySourceName).
+ filter(name -> name.equals(expectedAppConfigGroup)).count() == 1);
+ }
+ }
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoaderTest.java b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoaderTest.java
index f7fdb2adf..9bdec9385 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoaderTest.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoaderTest.java
@@ -37,7 +37,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.boot.ConfigurableBootstrapContext;
import org.springframework.boot.context.config.ConfigData;
import org.springframework.boot.context.config.ConfigDataLoaderContext;
import org.springframework.boot.context.config.Profiles;
@@ -82,7 +81,6 @@ public class PolarisConfigDataLoaderTest {
try (MockedStatic mockedStatic = mockStatic(ConfigFileServiceFactory.class)) {
ConfigDataLoaderContext context = mock(ConfigDataLoaderContext.class);
PolarisConfigDataResource polarisConfigDataResource = mock(PolarisConfigDataResource.class);
- ConfigurableBootstrapContext bootstrapContext = mock(ConfigurableBootstrapContext.class);
PolarisConfigProperties polarisConfigProperties = mock(PolarisConfigProperties.class);
PolarisContextProperties polarisContextProperties = mock(PolarisContextProperties.class);
ConfigFileService configFileService = mock(ConfigFileService.class);
@@ -101,7 +99,6 @@ public class PolarisConfigDataLoaderTest {
ConfigKVFile propertiesFile = new MockedConfigKVFile(applicationProperties);
when(configFileService.getConfigPropertiesFile(testNamespace, testServiceName, "application.properties"))
.thenReturn(propertiesFile);
- when(context.getBootstrapContext()).thenReturn(bootstrapContext);
when(polarisContextProperties.getNamespace()).thenReturn(testNamespace);
when(polarisContextProperties.getService()).thenReturn(testServiceName);
@@ -141,7 +138,6 @@ public class PolarisConfigDataLoaderTest {
try (MockedStatic mockedStatic = mockStatic(ConfigFileServiceFactory.class)) {
ConfigDataLoaderContext context = mock(ConfigDataLoaderContext.class);
PolarisConfigDataResource polarisConfigDataResource = mock(PolarisConfigDataResource.class);
- ConfigurableBootstrapContext bootstrapContext = mock(ConfigurableBootstrapContext.class);
PolarisConfigProperties polarisConfigProperties = mock(PolarisConfigProperties.class);
PolarisContextProperties polarisContextProperties = mock(PolarisContextProperties.class);
ConfigFileService configFileService = mock(ConfigFileService.class);
@@ -180,8 +176,6 @@ public class PolarisConfigDataLoaderTest {
active.add("dev");
when(profiles.getActive()).thenReturn(active);
- when(context.getBootstrapContext()).thenReturn(bootstrapContext);
-
when(polarisContextProperties.getNamespace()).thenReturn(testNamespace);
when(polarisContextProperties.getService()).thenReturn(testServiceName);
@@ -221,7 +215,6 @@ public class PolarisConfigDataLoaderTest {
try (MockedStatic mockedStatic = mockStatic(ConfigFileServiceFactory.class)) {
ConfigDataLoaderContext context = mock(ConfigDataLoaderContext.class);
PolarisConfigDataResource polarisConfigDataResource = mock(PolarisConfigDataResource.class);
- ConfigurableBootstrapContext bootstrapContext = mock(ConfigurableBootstrapContext.class);
PolarisConfigProperties polarisConfigProperties = mock(PolarisConfigProperties.class);
PolarisContextProperties polarisContextProperties = mock(PolarisContextProperties.class);
ConfigFileService configFileService = mock(ConfigFileService.class);
@@ -253,8 +246,6 @@ public class PolarisConfigDataLoaderTest {
ConfigKVFile file1 = new MockedConfigKVFile(file1Map);
when(configFileService.getConfigPropertiesFile(testNamespace, customGroup, customFile1)).thenReturn(file1);
- when(context.getBootstrapContext()).thenReturn(bootstrapContext);
-
when(polarisContextProperties.getNamespace()).thenReturn(testNamespace);
when(polarisContextProperties.getService()).thenReturn(testServiceName);