package com.tanpu.community.config; import com.ctrip.framework.apollo.model.ConfigChange; import com.ctrip.framework.apollo.model.ConfigChangeEvent; import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener; import com.ctrip.framework.apollo.spring.boot.ApolloAutoConfiguration; import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.context.environment.EnvironmentChangeEvent; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.util.LinkedList; import java.util.List; /** * created by xd on 2021/5/27 */ @Component @Slf4j @ConditionalOnProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED) @AutoConfigureAfter(ApolloAutoConfiguration.class) public class ApolloRefresherConfig implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @ApolloConfigChangeListener(value = {"application.yml"}) public void onChange(ConfigChangeEvent changeEvent) { refreshProperties(changeEvent); } private void refreshProperties(ConfigChangeEvent changeEvent) { log.info("Refreshing properties! changedKeys:" + changeEvent.changedKeys()); List<ConfigChange> changes = new LinkedList<>(); for (String changedKey : changeEvent.changedKeys()) { changes.add(changeEvent.getChange(changedKey)); } log.info("Refreshing properties! changes:" + StringUtils.join(changes, "\n")); this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys())); } }