package com.tanpu.feo.feojob.config; import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.model.ConfigChangeEvent; import com.ctrip.framework.apollo.spring.annotation.ApolloConfig; 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 com.tanpu.common.constant.CommonConstant; import lombok.extern.slf4j.Slf4j; 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 javax.annotation.PostConstruct; import java.util.Iterator; import java.util.Set; /*动态刷新日志参数配置和tanpu.开头的配置*/ @Component @Slf4j @ConditionalOnProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED) @AutoConfigureAfter(ApolloAutoConfiguration.class) public class ApolloRefresherConfiguration implements ApplicationContextAware { private ApplicationContext applicationContext; @ApolloConfig private Config config; @PostConstruct private void initialize() { log.info("初始化配置变更监听"); refresh(config.getPropertyNames()); } // 刷新参数(刷新"common"和"application"空间中,"logging.level."或"tanpu."开头的配置 ) @ApolloConfigChangeListener(value = {"application.yml" }, interestedKeyPrefixes = { "logging.level.", "tanpu." }) public void onChangeLogLevel(ConfigChangeEvent changeEvent) { log.info("Refreshing logging levels and tanpu."); Iterator<String> iterator = changeEvent.changedKeys().iterator(); while(iterator.hasNext()) { log.info("refresh key:{}",iterator.next()); } this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys())); log.info("Logging levels and tanpu. refreshed"); } /** 刷新参数配置 */ private void refresh(Set<String> changedKeys) { log.info("Refreshing logging.level and tanpu. properties"); Iterator<String> iterator = changedKeys.iterator(); while(iterator.hasNext()) { log.info("refresh key:{}",iterator.next()); } this.applicationContext.publishEvent(new EnvironmentChangeEvent(changedKeys)); log.info("logging.level properties and tanpu. refreshed"); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }