|
|
@ -26,6 +26,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
|
import com.tencent.cloud.polaris.config.spring.event.ConfigChangeSpringEvent;
|
|
|
|
import com.tencent.cloud.polaris.config.spring.event.ConfigChangeSpringEvent;
|
|
|
|
import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
|
|
|
|
import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
|
|
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
|
|
|
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
|
|
|
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
|
|
|
|
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
|
|
|
@ -37,6 +39,7 @@ import org.springframework.context.ConfigurableApplicationContext;
|
|
|
|
import org.springframework.core.env.ConfigurableEnvironment;
|
|
|
|
import org.springframework.core.env.ConfigurableEnvironment;
|
|
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import org.springframework.core.env.MutablePropertySources;
|
|
|
|
import org.springframework.core.env.MutablePropertySources;
|
|
|
|
|
|
|
|
import org.springframework.core.env.StandardEnvironment;
|
|
|
|
import org.springframework.lang.NonNull;
|
|
|
|
import org.springframework.lang.NonNull;
|
|
|
|
|
|
|
|
|
|
|
|
import static com.tencent.cloud.polaris.config.listener.PolarisConfigListenerContext.fireConfigChange;
|
|
|
|
import static com.tencent.cloud.polaris.config.listener.PolarisConfigListenerContext.fireConfigChange;
|
|
|
@ -50,6 +53,8 @@ import static com.tencent.cloud.polaris.config.listener.PolarisConfigListenerCon
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public final class PolarisConfigChangeEventListener implements ApplicationListener<ApplicationEvent>, ApplicationEventPublisherAware {
|
|
|
|
public final class PolarisConfigChangeEventListener implements ApplicationListener<ApplicationEvent>, ApplicationEventPublisherAware {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(PolarisConfigChangeEventListener.class);
|
|
|
|
|
|
|
|
|
|
|
|
private static final AtomicBoolean started = new AtomicBoolean();
|
|
|
|
private static final AtomicBoolean started = new AtomicBoolean();
|
|
|
|
|
|
|
|
|
|
|
|
private ApplicationEventPublisher eventPublisher;
|
|
|
|
private ApplicationEventPublisher eventPublisher;
|
|
|
@ -96,12 +101,23 @@ public final class PolarisConfigChangeEventListener implements ApplicationListen
|
|
|
|
Map<String, Object> ret = Maps.newHashMap();
|
|
|
|
Map<String, Object> ret = Maps.newHashMap();
|
|
|
|
MutablePropertySources sources = environment.getPropertySources();
|
|
|
|
MutablePropertySources sources = environment.getPropertySources();
|
|
|
|
sources.iterator().forEachRemaining(propertySource -> {
|
|
|
|
sources.iterator().forEachRemaining(propertySource -> {
|
|
|
|
|
|
|
|
// Don't read system env variable.
|
|
|
|
|
|
|
|
if (StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME.equals(propertySource.getName())) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Object o = propertySource.getSource();
|
|
|
|
Object o = propertySource.getSource();
|
|
|
|
if (o instanceof Map) {
|
|
|
|
if (o instanceof Map) {
|
|
|
|
for (Map.Entry<String, Object> entry : ((Map<String, Object>) o).entrySet()) {
|
|
|
|
for (Map.Entry<String, Object> entry : ((Map<String, Object>) o).entrySet()) {
|
|
|
|
String key = entry.getKey();
|
|
|
|
String key = entry.getKey();
|
|
|
|
String value = environment.getProperty(key);
|
|
|
|
try {
|
|
|
|
ret.put(key, value);
|
|
|
|
String value = environment.getProperty(key);
|
|
|
|
|
|
|
|
ret.put(key, value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
|
|
|
LOG.warn("Read property from {} with key {} failed.", propertySource.getName(), key, e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (o instanceof Collection) {
|
|
|
|
else if (o instanceof Collection) {
|
|
|
|