@ -26,6 +26,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import com.google.common.collect.Maps ;
import com.tencent.cloud.polaris.config.spring.event.ConfigChangeSpringEvent ;
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.cloud.context.environment.EnvironmentChangeEvent ;
@ -37,6 +39,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment ;
import org.springframework.core.env.Environment ;
import org.springframework.core.env.MutablePropertySources ;
import org.springframework.core.env.StandardEnvironment ;
import org.springframework.lang.NonNull ;
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 {
private static final Logger LOG = LoggerFactory . getLogger ( PolarisConfigChangeEventListener . class ) ;
private static final AtomicBoolean started = new AtomicBoolean ( ) ;
private ApplicationEventPublisher eventPublisher ;
@ -95,13 +100,24 @@ public final class PolarisConfigChangeEventListener implements ApplicationListen
Map < String , Object > ret = Maps . newHashMap ( ) ;
MutablePropertySources sources = environment . getPropertySources ( ) ;
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 ( ) ;
if ( o instanceof Map ) {
for ( Map . Entry < String , Object > entry : ( ( Map < String , Object > ) o ) . entrySet ( ) ) {
String key = entry . getKey ( ) ;
try {
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 ) {
int count = 0 ;