Skip to content

Commit b2d127d

Browse files
feat:support consul config data. (#1417)
Co-authored-by: Haotian Zhang <skyebefreeman@qq.com>
1 parent ff303bf commit b2d127d

File tree

21 files changed

+264
-145
lines changed

21 files changed

+264
-145
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@
2626
- [fix:fix app starting failed when user using custom OpenAPI bean.](https://github.com/Tencent/spring-cloud-tencent/pull/1414)
2727
- [fix: move ConditionalOnTsfEnabled to spring-cloud-tencent-commons and fix PolarisInetUtilsAutoConfiguration.](https://github.com/Tencent/spring-cloud-tencent/pull/1415)
2828
- [fix: memory cost too many when using wildcard feign calls](https://github.com/Tencent/spring-cloud-tencent/pull/1416)
29+
- [fix: memory cost too many when using wildcard feign calls](https://github.com/Tencent/spring-cloud-tencent/pull/1417)

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigBootstrapAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.context.annotation.Bean;
3737
import org.springframework.context.annotation.Configuration;
3838
import org.springframework.context.annotation.Import;
39+
import org.springframework.context.annotation.Primary;
3940
import org.springframework.core.env.Environment;
4041

4142
/**
@@ -84,6 +85,7 @@ public ConfigurationModifier configurationModifier(PolarisConfigProperties polar
8485
}
8586

8687
@Bean
88+
@Primary
8789
@ConditionalOnMissingBean(search = SearchStrategy.CURRENT)
8890
@ConditionalOnReflectRefreshType
8991
public ConfigurationPropertiesRebinder affectedConfigurationPropertiesRebinder(

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigFileLocator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ private void afterLocatePolarisConfigExtension(CompositePropertySource composite
117117
}
118118

119119
private void initInternalConfigFiles(CompositePropertySource compositePropertySource) {
120+
if (!polarisConfigProperties.isInternalEnabled()) {
121+
return;
122+
}
120123
List<ConfigFileMetadata> internalConfigFiles = getInternalConfigFiles();
121124

122125
for (ConfigFileMetadata configFile : internalConfigFiles) {

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigPropertyAutoRefresher.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818

1919
package com.tencent.cloud.polaris.config.adapter;
2020

21+
import java.util.HashMap;
2122
import java.util.List;
2223
import java.util.Map;
2324
import java.util.concurrent.atomic.AtomicBoolean;
2425

2526
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
2627
import com.tencent.cloud.polaris.config.logger.PolarisConfigLoggerContext;
28+
import com.tencent.polaris.configuration.api.core.ConfigKVFile;
2729
import com.tencent.polaris.configuration.api.core.ConfigKVFileChangeListener;
2830
import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
31+
import com.tencent.polaris.configuration.client.internal.CompositeConfigFile;
2932
import org.slf4j.Logger;
3033
import org.slf4j.LoggerFactory;
3134

@@ -79,8 +82,18 @@ private void registerPolarisConfigPublishEvent() {
7982

8083
// register polaris config publish event
8184
for (PolarisPropertySource polarisPropertySource : polarisPropertySources) {
82-
registerPolarisConfigPublishChangeListener(polarisPropertySource);
83-
customRegisterPolarisConfigPublishChangeListener(polarisPropertySource);
85+
if (polarisPropertySource.getConfigKVFile() instanceof CompositeConfigFile) {
86+
CompositeConfigFile configKVFile = (CompositeConfigFile) polarisPropertySource.getConfigKVFile();
87+
for (ConfigKVFile cf : configKVFile.getConfigKVFiles()) {
88+
PolarisPropertySource p = new PolarisPropertySource(cf.getNamespace(), cf.getFileGroup(), cf.getFileName(), cf, new HashMap<>());
89+
registerPolarisConfigPublishChangeListener(p);
90+
customRegisterPolarisConfigPublishChangeListener(p);
91+
}
92+
}
93+
else {
94+
registerPolarisConfigPublishChangeListener(polarisPropertySource);
95+
customRegisterPolarisConfigPublishChangeListener(polarisPropertySource);
96+
}
8497
}
8598
}
8699

@@ -93,6 +106,7 @@ private void customInitRegisterPolarisConfig(PolarisConfigPropertyAutoRefresher
93106
}
94107

95108
public void registerPolarisConfigPublishChangeListener(PolarisPropertySource polarisPropertySource) {
109+
LOGGER.info("{} will register polaris config publish listener", polarisPropertySource.getPropertySourceName());
96110
polarisPropertySource.getConfigKVFile()
97111
.addChangeListener((ConfigKVFileChangeListener) configKVFileChangeEvent -> {
98112

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisPropertySource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.Map;
2222

23+
import com.tencent.cloud.polaris.config.utils.PolarisPropertySourceUtils;
2324
import com.tencent.polaris.configuration.api.core.ConfigKVFile;
2425

2526
import org.springframework.core.env.MapPropertySource;
@@ -40,7 +41,7 @@ public class PolarisPropertySource extends MapPropertySource {
4041
private final ConfigKVFile configKVFile;
4142

4243
public PolarisPropertySource(String namespace, String group, String fileName, ConfigKVFile configKVFile, Map<String, Object> source) {
43-
super(namespace + "-" + group + "-" + fileName, source);
44+
super(PolarisPropertySourceUtils.generateName(namespace, group, fileName), source);
4445

4546
this.namespace = namespace;
4647
this.group = group;
@@ -64,7 +65,7 @@ public String getPropertySourceName() {
6465
return namespace + "-" + group + "-" + fileName;
6566
}
6667

67-
ConfigKVFile getConfigKVFile() {
68+
public ConfigKVFile getConfigKVFile() {
6869
return configKVFile;
6970
}
7071

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/PolarisConfigProperties.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ public class PolarisConfigProperties {
9191
*/
9292
private String localFileRootPath = "./polaris/backup/config";
9393

94+
/**
95+
* If internal config file enabled.
96+
*/
97+
private boolean internalEnabled = true;
98+
9499
public boolean isEnabled() {
95100
return enabled;
96101
}
@@ -179,6 +184,14 @@ public void setLocalFileRootPath(String localFileRootPath) {
179184
this.localFileRootPath = localFileRootPath;
180185
}
181186

187+
public boolean isInternalEnabled() {
188+
return internalEnabled;
189+
}
190+
191+
public void setInternalEnabled(boolean internalEnabled) {
192+
this.internalEnabled = internalEnabled;
193+
}
194+
182195
@Override
183196
public String toString() {
184197
return "PolarisConfigProperties{" +
@@ -193,6 +206,7 @@ public String toString() {
193206
", groups=" + groups +
194207
", dataSource='" + dataSource + '\'' +
195208
", localFileRootPath='" + localFileRootPath + '\'' +
209+
", internalEnabled=" + internalEnabled +
196210
'}';
197211
}
198212
}

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/configdata/PolarisConfigDataLoader.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
package com.tencent.cloud.polaris.config.configdata;
1919

2020
import java.util.ArrayList;
21+
import java.util.Collections;
2122
import java.util.List;
2223
import java.util.concurrent.atomic.AtomicBoolean;
2324

25+
import com.tencent.cloud.polaris.config.adapter.PolarisConfigCustomExtensionLayer;
2426
import com.tencent.cloud.polaris.config.adapter.PolarisConfigFilePuller;
27+
import com.tencent.cloud.polaris.config.adapter.PolarisServiceLoaderUtil;
2528
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
2629
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
2730
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
@@ -38,6 +41,7 @@
3841
import org.springframework.boot.context.config.Profiles;
3942
import org.springframework.boot.logging.DeferredLogFactory;
4043
import org.springframework.core.env.CompositePropertySource;
44+
import org.springframework.core.env.PropertySource;
4145
import org.springframework.util.CollectionUtils;
4246
import org.springframework.util.StringUtils;
4347

@@ -59,6 +63,7 @@ public class PolarisConfigDataLoader implements ConfigDataLoader<PolarisConfigDa
5963
static final AtomicBoolean CUSTOM_POLARIS_CONFIG_FILE_LOADED = new AtomicBoolean(false);
6064
private static final String POLARIS_CONFIG_PROPERTY_SOURCE_NAME = "polaris-config";
6165
private final Log log;
66+
private final PolarisConfigCustomExtensionLayer polarisConfigCustomExtensionLayer = PolarisServiceLoaderUtil.getPolarisConfigCustomExtensionLayer();
6267
private ConfigFileService configFileService;
6368
private PolarisConfigFilePuller puller;
6469

@@ -83,7 +88,9 @@ public ConfigData load(ConfigDataLoaderContext context, PolarisConfigDataResourc
8388

8489
public ConfigData load(ConfigurableBootstrapContext bootstrapContext, PolarisConfigDataResource resource) {
8590
CompositePropertySource compositePropertySource = locate(bootstrapContext, resource);
86-
return new ConfigData(compositePropertySource.getPropertySources(), getOptions(resource));
91+
List<PropertySource<?>> propertySourceList = new ArrayList<>(compositePropertySource.getPropertySources());
92+
Collections.reverse(propertySourceList);
93+
return new ConfigData(propertySourceList, getOptions(resource));
8794
}
8895

8996
private CompositePropertySource locate(ConfigurableBootstrapContext bootstrapContext,
@@ -97,16 +104,21 @@ private CompositePropertySource locate(ConfigurableBootstrapContext bootstrapCon
97104
if (null == this.puller) {
98105
this.puller = PolarisConfigFilePuller.get(resource.getPolarisContextProperties(), configFileService);
99106
}
107+
// load custom config extension files
108+
if (polarisConfigCustomExtensionLayer != null) {
109+
polarisConfigCustomExtensionLayer.initConfigFiles(null, compositePropertySource, configFileService);
110+
}
111+
// load spring boot default config files
112+
PolarisConfigProperties polarisConfigProperties = resource.getPolarisConfigProperties();
100113
Profiles profiles = resource.getProfiles();
101-
if (INTERNAL_CONFIG_FILES_LOADED.compareAndSet(false, true)) {
114+
if (polarisConfigProperties.isInternalEnabled() && INTERNAL_CONFIG_FILES_LOADED.compareAndSet(false, true)) {
102115
log.info("loading internal config files");
103116
String[] activeProfiles = profiles.getActive().toArray(new String[] {});
104117
String[] defaultProfiles = profiles.getDefault().toArray(new String[] {});
105118
this.puller.initInternalConfigFiles(
106119
compositePropertySource, activeProfiles, defaultProfiles, resource.getServiceName());
107120
}
108-
109-
PolarisConfigProperties polarisConfigProperties = resource.getPolarisConfigProperties();
121+
// load custom config files
110122
if (!CollectionUtils.isEmpty(polarisConfigProperties.getGroups()) &&
111123
CUSTOM_POLARIS_CONFIG_FILE_LOADED.compareAndSet(false, true)) {
112124
log.info("loading custom config files");
@@ -118,6 +130,10 @@ private CompositePropertySource locate(ConfigurableBootstrapContext bootstrapCon
118130
log.info("loading config data config file, group:" + resource.getGroupName() + " file: " + resource.getFileName());
119131
this.puller.initCustomPolarisConfigFile(compositePropertySource, configFileGroup(resource));
120132
}
133+
if (polarisConfigCustomExtensionLayer != null) {
134+
polarisConfigCustomExtensionLayer.executeAfterLocateConfigReturning(compositePropertySource);
135+
}
136+
121137
return compositePropertySource;
122138
}
123139

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/tsf/PolarisAdaptorTsfConfigAutoConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.slf4j.Logger;
2828
import org.slf4j.LoggerFactory;
2929

30-
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3231
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
3332
import org.springframework.context.annotation.Bean;
@@ -46,8 +45,7 @@ public class PolarisAdaptorTsfConfigAutoConfiguration {
4645

4746
{
4847
System.setProperty("spring.cloud.polaris.config.refresh-type", "refresh_context");
49-
LOGGER.info(
50-
"[SCTT Config] PolarisAdaptorTsfConfigAutoConfiguration init set spring.cloud.polaris.config.refresh-type to refresh_context");
48+
LOGGER.info("PolarisAdaptorTsfConfigAutoConfiguration init set spring.cloud.polaris.config.refresh-type to refresh_context");
5149
}
5250

5351
@Bean
@@ -65,7 +63,7 @@ public TsfConsulConfigRefreshEventListener polarisAdaptorTsfConsulRefreshEventLi
6563
*/
6664
@Bean
6765
@ConditionalOnMissingBean
68-
@ConditionalOnExpression("${spring.cloud.consul.config.enabled:true} == false and ${tsf.config.instance.released-config.lookup.enabled:true} == true")
66+
@ConditionalOnProperty(name = "tsf.config.instance.released-config.lookup.enabled", matchIfMissing = true)
6967
public PolarisAdaptorTsfConfigController polarisAdaptorTsfConfigController() {
7068
return new PolarisAdaptorTsfConfigController();
7169
}

spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/tsf/PolarisAdaptorTsfConfigBootstrapConfiguration.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2424
import org.springframework.context.annotation.Configuration;
25-
import org.springframework.context.annotation.Import;
2625

2726
/**
2827
* @author juanyinyang
@@ -32,7 +31,6 @@
3231
@ConditionalOnProperty("spring.cloud.polaris.enabled")
3332
@ConditionalOnTsfEnabled
3433
@ConditionalOnPolarisConfigEnabled
35-
@Import(PolarisAdaptorTsfConfigAutoConfiguration.class)
3634
public class PolarisAdaptorTsfConfigBootstrapConfiguration {
3735

3836

0 commit comments

Comments
 (0)