写点什么

apollo 在 Spring boot 加载过程解析,redis 单线程原理

用户头像
极客good
关注
发布于: 刚刚

apollo.cacheDir = /opt

是否保持和 apollo 配置页面的配置顺序一致

apollo.property.order.enable = true


加载过程解析


======


public class ApolloApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> , EnvironmentPostProcessor, Ordered {


public static final int DEFAULT_ORDER = 0;


private static final Logger logger = LoggerFactory.getLogger(ApolloApplicationContextInitializer.class);


private static final Splitter NAMESPACE_SPLITTER = Splitter.on(",").omitEmptyStrings().trimResults();


private static final String[] APOLLO_SYSTEM_PROPERTIES = {"app.id", ConfigConsts.APOLLO_CLUSTER_KEY,


"apollo.cacheDir", "apollo.accesskey.secret", ConfigConsts.APOLLO_META_KEY, PropertiesFactory.APOLLO_PROPERTY_ORDER_ENABLE};


private final ConfigPropertySourceFactory configPropertySourceFactory = SpringInjector.getInstance(ConfigPropertySourceFactory.class);


private int order = DEFAULT_ORDER;


@Override


public void initialize(ConfigurableApplicationContext context) {


ConfigurableEnvironment environment = context.getEnvironment();


if (!environment.getProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED, Boolean.class, false)) {


logger.debug("Apollo bootstrap config is not enabled for context {}, see property: ${{}}", context, PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED);


return;


}


logger.debug("Apollo bootstrap config is enabled for context {}", context);


initialize(environment);


}


/**


  • Initialize Apollo Configurations Just after environment is ready.

  • @param environment


*/


protected void initialize(ConfigurableEnvironment environment) {


if (environment.getPropertySources().contains(PropertySourcesConstants.APOLLO_BOOTSTRAP_PROPERTY_SOURCE_NAME)) {


//already initialized


return;


}


String namespaces = environment.getProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_NAMESPACES, ConfigConsts.NAMESPACE_APPLICATION);


logger.debug("Apollo bootstrap namespaces: {}", namespaces);


List<String> namespaceList = NAMESPACE_SPLITTER.splitToList(namespaces);


CompositePropertySource composite = new CompositePropertySource(PropertySourcesConstants.APOLLO_BOOTSTRAP_PROPERTY_SOURCE_NAME);


for (String namespace : namespaceList) {


Config config = ConfigService.getConfig(namespace);


composite.addPropertySource(configPropertySourceFactory.getConfigPropertySource(namespace, config));


}


environment.getPropertySources().addFirst(composite);


}


/**


  • To fill system properties from environment config


*/


void initializeSystemProperty(ConfigurableEnvironment environment) {


for (String propertyName : APOLLO_SYSTEM_PROPERTIES) {


fillSystemPropertyFromEnvironment(environment, propertyName);


}


}


private void fillSystemPropertyFromEnvironment(ConfigurableEnvironment environment, String propertyName) {


if (System.getProperty(propertyName) != null) {


return;


}


String propertyValue = environment.getProperty(propertyName);


if (Strings.isNullOrEmpty(propertyValue)) {


return;


}


System.setProperty(propertyName, propertyValue);


}


/**


  • In order to load Apollo configurations as early as even before Spring loading logging system phase,

  • this EnvironmentPostProcessor can be called Just After ConfigFileApplicationListener has succeeded.

  • <br />

  • The processing sequence would be like this: <br />

  • Load Bootstrap properties and application properties -----> load Apollo configuration properties ----> Initialize Logging systems

  • @param configurableEnvironment

  • @param springApplication


*/


@Override


public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication springApplication) {


// should always initialize system properties like app.id in the first place


initializeSystemProperty(configurableEnvironment);


Boolean eagerLoadEnabled = configurableEnvironment.getProperty(PropertySourcesConstants.APOLLO_BOOTSTRAP_EAGER_LOAD_ENABLED, Boolean.class, false);


//EnvironmentPostProcessor should not be triggered if you don't want Apollo Loading before Logging System Initialization


if (!eagerLoadEnabled) {


return;


}


Boolean bootstrapEnabled = configurableEnvironment.getProperty(PropertySourcesConstants.APOLLO_BO


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


OTSTRAP_ENABLED, Boolean.class, false);


if (bootstrapEnabled) {


initialize(configurableEnvironment);


}


}


/**


  • @since 1.3.0


*/


@Override


public int getOrder() {


return order;


}


/**

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
apollo在Spring boot加载过程解析,redis单线程原理