diff --git a/CHANGELOG.md b/CHANGELOG.md index 907d9cb0..4a9c111b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,3 +11,4 @@ - [optimize:optimize PolarisRouterContext and constants.](https://github.com/Tencent/spring-cloud-tencent/pull/628) - [support spring-retry router](https://github.com/Tencent/spring-cloud-tencent/pull/631) - [feat:Transfer http headers specified by environment variables](https://github.com/Tencent/spring-cloud-tencent/pull/638) +- [feat:support read config file from local file system.](https://github.com/Tencent/spring-cloud-tencent/pull/649) 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 2bcd54c9..e01a67cb 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 @@ -41,6 +41,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; @@ -53,6 +56,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"); @@ -75,6 +99,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 9b11277f..50e8fde5 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 @@ -55,6 +55,12 @@ public class PolarisConfigProperties { private boolean shutdownIfConnectToConfigServerFailed = true; + /** + * When the local configuration is consistent with the remote configuration, whether to + * preferentially load the remote configuration. + */ + private boolean preference = true; + /** * Attribute refresh type. */ @@ -65,6 +71,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; } @@ -120,4 +140,28 @@ public class PolarisConfigProperties { public void setGroups(List groups) { this.groups = groups; } + + public boolean isPreference() { + return preference; + } + + 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 23a68ae2..f3dd3fe3 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 @@ -53,6 +53,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": "The root path of config files, only used in local mode." } ] } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 05a0fa2c..1acef11f 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -71,7 +71,7 @@ 1.8.0-Hoxton.SR12-SNAPSHOT - 1.8.0 + 1.9.1 1.2.11 4.5.1 1.12.10 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 1f257a78..88ffbba8 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 @@ -9,6 +9,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