From 35db409c0d85e50c84fc20d8d7af9fe1f25caf53 Mon Sep 17 00:00:00 2001 From: yangjuanying <531948963@qq.com> Date: Thu, 10 Aug 2023 13:11:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BF=9D=E5=AD=98=E5=8C=97?= =?UTF-8?q?=E6=9E=81=E6=98=9Fcache=20key=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/PolarisConfigFileLocator.java | 30 ++++++++------ .../config/cache/PolarisPropertyCache.java | 40 +++++++++++++++++++ 2 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/cache/PolarisPropertyCache.java 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 740f697bc..6faf0a73f 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 @@ -20,6 +20,7 @@ package com.tencent.cloud.polaris.config.adapter; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -29,6 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; import com.tencent.cloud.polaris.config.config.ConfigFileGroup; import com.tencent.cloud.polaris.config.config.PolarisConfigProperties; +import com.tencent.cloud.polaris.config.config.cache.PolarisPropertyCache; import com.tencent.cloud.polaris.config.enums.ConfigFileFormat; import com.tencent.cloud.polaris.context.config.PolarisContextProperties; import com.tencent.polaris.configuration.api.core.ConfigFileMetadata; @@ -94,20 +96,24 @@ public class PolarisConfigFileLocator implements PropertySourceLocator { @Override public PropertySource locate(Environment environment) { CompositePropertySource compositePropertySource = new CompositePropertySource(POLARIS_CONFIG_PROPERTY_SOURCE_NAME); - - // load custom config extension files - initCustomPolarisConfigExtensionFiles(compositePropertySource); - // load spring boot default config files - initInternalConfigFiles(compositePropertySource); - - // load custom config files - List configFileGroups = polarisConfigProperties.getGroups(); - if (CollectionUtils.isEmpty(configFileGroups)) { + try { + // load custom config extension files + initCustomPolarisConfigExtensionFiles(compositePropertySource); + // load spring boot default config files + initInternalConfigFiles(compositePropertySource); + // load custom config files + List configFileGroups = polarisConfigProperties.getGroups(); + if (CollectionUtils.isEmpty(configFileGroups)) { + return compositePropertySource; + } + initCustomPolarisConfigFiles(compositePropertySource, configFileGroups); return compositePropertySource; } - initCustomPolarisConfigFiles(compositePropertySource, configFileGroups); - - return compositePropertySource; + finally { + PolarisPropertyCache.getInstance().clear(); + PolarisPropertyCache.getInstance().getCache() + .addAll(new HashSet<>(Arrays.asList(compositePropertySource.getPropertyNames()))); + } } private void initCustomPolarisConfigExtensionFiles(CompositePropertySource compositePropertySource) { diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/cache/PolarisPropertyCache.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/cache/PolarisPropertyCache.java new file mode 100644 index 000000000..4fef6d134 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/config/cache/PolarisPropertyCache.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 www.tencent.com. + * All Rights Reserved. + * This program is the confidential and proprietary information of + * www.tencent.com ("Confidential Information"). You shall not disclose such + * Confidential Information and shall use it only in accordance with + * the terms of the license agreement you entered into with www.tencent.com. + */ +package com.tencent.cloud.polaris.config.config.cache; + +import java.util.HashSet; +import java.util.Set; + + +/** + * @author juanyinyang + * @Date 2023年8月8日 下午4:56:18 + */ +public final class PolarisPropertyCache { + + private static final PolarisPropertyCache instance = new PolarisPropertyCache(); + + private final Set cache = new HashSet<>(); + + private PolarisPropertyCache() { + + } + + public static PolarisPropertyCache getInstance() { + return instance; + } + + public Set getCache() { + return cache; + } + + public void clear() { + cache.clear(); + } +}