From 83bf200a1b365064bedd3e9be3d31f9f53b2db8a Mon Sep 17 00:00:00 2001 From: lepdou Date: Thu, 13 Oct 2022 20:12:18 +0800 Subject: [PATCH] support read config file from local file system (#640) --- CHANGELOG.md | 3 +- .../polaris/config/ConfigurationModifier.java | 26 ++++++++++++++++ .../config/PolarisConfigProperties.java | 30 +++++++++++++++++++ ...itional-spring-configuration-metadata.json | 12 ++++++++ spring-cloud-tencent-dependencies/pom.xml | 2 +- .../src/main/resources/bootstrap.yml | 2 ++ 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d4afedf..efde869a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,5 +16,6 @@ - [Feature: support new label expression](https://github.com/Tencent/spring-cloud-tencent/pull/627) - [feat:report the labels when using RestTemplate.](https://github.com/Tencent/spring-cloud-tencent/pull/629) - [Bugfix: fix throw npe when router context is null](https://github.com/Tencent/spring-cloud-tencent/pull/635) -- [fix:cancel reporting useless metadata.](https://github.com/Tencent/spring-cloud-tencent/pull/639) - [Optimize:optimize transfer](https://github.com/Tencent/spring-cloud-tencent/pull/636) +- [fix:cancel reporting useless metadata.](https://github.com/Tencent/spring-cloud-tencent/pull/639) +- [Feature: support read config file from local file system](https://github.com/Tencent/spring-cloud-tencent/pull/640) diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java index d505d378..7912787c 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java @@ -42,6 +42,9 @@ import org.springframework.util.CollectionUtils; public class ConfigurationModifier implements PolarisConfigModifier { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationModifier.class); + private static final String DATA_SOURCE_POLARIS = "polaris"; + private static final String DATA_SOURCE_LOCAL = "local"; + private final PolarisConfigProperties polarisConfigProperties; private final PolarisContextProperties polarisContextProperties; @@ -54,6 +57,27 @@ public class ConfigurationModifier implements PolarisConfigModifier { @Override public void modify(ConfigurationImpl configuration) { + if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), DATA_SOURCE_POLARIS)) { + initByPolarisDataSource(configuration); + } + else if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), DATA_SOURCE_LOCAL)) { + initByLocalDataSource(configuration); + } + else { + throw new RuntimeException("Unsupported config data source"); + } + } + + private void initByLocalDataSource(ConfigurationImpl configuration) { + configuration.getConfigFile().getServerConnector().setConnectorType("localFile"); + + String localFileRootPath = polarisConfigProperties.getLocalFileRootPath(); + configuration.getConfigFile().getServerConnector().setPersistDir(localFileRootPath); + + LOGGER.info("[SCT] Run spring cloud tencent config with local data source. localFileRootPath = {}", localFileRootPath); + } + + private void initByPolarisDataSource(ConfigurationImpl configuration) { // set connector type configuration.getConfigFile().getServerConnector().setConnectorType("polaris"); @@ -76,6 +100,8 @@ public class ConfigurationModifier implements PolarisConfigModifier { checkAddressAccessible(configAddresses); configuration.getConfigFile().getServerConnector().setAddresses(configAddresses); + + LOGGER.info("[SCT] Run spring cloud tencent config in polaris data source."); } @Override diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/PolarisConfigProperties.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/PolarisConfigProperties.java index b9ffc5cd..8786abb2 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/PolarisConfigProperties.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/PolarisConfigProperties.java @@ -70,6 +70,20 @@ public class PolarisConfigProperties { */ private List groups; + /** + * Where to load config file. default is polaris. + *
+ * polaris: load from polaris server. + *
+ * local: load from local file system. + */ + private String dataSource = "polaris"; + + /** + * The root path of config files, only used in local mode. + */ + private String localFileRootPath = "./polaris/backup/config"; + public boolean isEnabled() { return enabled; } @@ -133,4 +147,20 @@ public class PolarisConfigProperties { public void setPreference(boolean preference) { this.preference = preference; } + + public String getDataSource() { + return dataSource; + } + + public void setDataSource(String dataSource) { + this.dataSource = dataSource; + } + + public String getLocalFileRootPath() { + return localFileRootPath; + } + + public void setLocalFileRootPath(String localFileRootPath) { + this.localFileRootPath = localFileRootPath; + } } diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 40002aba..5aeb7a04 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-config/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -65,6 +65,18 @@ "type": "java.lang.Boolean", "defaultValue": true, "description": "Whether shutdown server if connect to config server failed." + }, + { + "name": "spring.cloud.polaris.config.data-source", + "type": "java.lang.String", + "defaultValue": "polaris", + "description": "Where to load config file, polaris or local." + }, + { + "name": "spring.cloud.polaris.config.local-file-root-path", + "type": "java.lang.String", + "defaultValue": "./polaris/backup/config", + "description": "Where to load config file, polaris or local." } ] } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index cd8e6ad9..c6bce1da 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -73,7 +73,7 @@ 1.8.0-2021.0.3-SNAPSHOT - 1.8.0 + 1.9.0-SNAPSHOT 31.0.1-jre 1.2.11 4.5.1 diff --git a/spring-cloud-tencent-examples/polaris-config-example/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-config-example/src/main/resources/bootstrap.yml index b6bc90d4..7ac704ca 100644 --- a/spring-cloud-tencent-examples/polaris-config-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-config-example/src/main/resources/bootstrap.yml @@ -11,6 +11,8 @@ spring: namespace: default config: auto-refresh: true # auto refresh when config file changed +# data-source: local # config data source default is polaris. +# local-file-root-path: # set root path for reading config file, when in local data source groups: - name: ${spring.application.name} # group name files: [ "config/application.properties", "config/bootstrap.yml" ] # config/application.properties takes precedence over config/bootstrap.yml