初学者网站建设网站建设套模板视频

当前位置: 首页 > news >正文

初学者网站建设,网站建设套模板视频,网盘搜索网站 怎么做,网页微信小程序一 、contextInitialized() eureka-core里面#xff0c;监听器的执行初始化的方法#xff0c;是contextInitialized()方法#xff0c;这个方法就是整个eureka-server启动初始化的一个入口。 Overridepublic void contextInitialized(ServletContextEvent event) {try {init…一 、contextInitialized() eureka-core里面监听器的执行初始化的方法是contextInitialized()方法这个方法就是整个eureka-server启动初始化的一个入口。 Overridepublic void contextInitialized(ServletContextEvent event) {try {initEurekaEnvironment();initEurekaServerContext();ServletContext sc event.getServletContext();sc.setAttribute(EurekaServerContext.class.getName(), serverContext);} catch (Throwable e) {logger.error(Cannot bootstrap eureka server :, e);throw new RuntimeException(Cannot bootstrap eureka server :, e);}} 二、initEurekaEnvironment() 我们可以看到第一行代码就是 initEurekaEnvironment();我们点进去可以看到 /*** Users can override to initialize the environment themselves.*/protected void initEurekaEnvironment() throws Exception {logger.info(Setting the eureka configuration..);String dataCenter ConfigurationManager.getConfigInstance().getString(EUREKA_DATACENTER);if (dataCenter null) {logger.info(Eureka data center value eureka.datacenter is not set, defaulting to default);ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_DATACENTER, DEFAULT);} else {ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_DATACENTER, dataCenter);}String environment ConfigurationManager.getConfigInstance().getString(EUREKA_ENVIRONMENT);if (environment null) {ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_ENVIRONMENT, TEST);logger.info(Eureka environment value eureka.environment is not set, defaulting to test);}}在这里其实会调用ConfigurationManager.getConfigInstance()方法这个方法其实就是初始化ConfigurationManager的实例也就是一个配置管理器的初始化的这么一个过程。 ConfigurationManager是什么呢看字面意思都猜的出来配置管理器管理eureka自己的所有的配置读取配置文件里的配置到内存里供后续的eureka-server运行来使用。 三、创建AbstractConfiguration 我们点击getConfigInstance可以看到下面的代码 public static AbstractConfiguration getConfigInstance() {if (instance null) {synchronized (ConfigurationManager.class) {if (instance null) {instance getConfigInstance(Boolean.getBoolean(DynamicPropertyFactory.DISABLE_DEFAULT_CONFIG));}}}return instance;} 这是使用double check volatile创建了一个AbstractConfiguration实例。 单例模式一个经典的作用就是将配置作为单例但是一般来说如果你要自己解析配置文件读取配置的话一般来说除非你是底层自研的框架。此时你可以设计一个ConfigurationManager就是一个配置管理器一般这个会做成单例的。 接下来我们看下createDefaultConfigInstance()方法。 private static AbstractConfiguration createDefaultConfigInstance() {ConcurrentCompositeConfiguration config new ConcurrentCompositeConfiguration(); try {DynamicURLConfiguration defaultURLConfig new DynamicURLConfiguration();config.addConfiguration(defaultURLConfig, URL_CONFIG_NAME);} catch (Throwable e) {logger.warn(Failed to create default dynamic configuration, e);}if (!Boolean.getBoolean(DISABLE_DEFAULT_SYS_CONFIG)) {SystemConfiguration sysConfig new SystemConfiguration();config.addConfiguration(sysConfig, SYS_CONFIG_NAME);}if (!Boolean.getBoolean(DISABLE_DEFAULT_ENV_CONFIG)) {EnvironmentConfiguration envConfig new EnvironmentConfiguration();config.addConfiguration(envConfig, ENV_CONFIG_NAME);}ConcurrentCompositeConfiguration appOverrideConfig new ConcurrentCompositeConfiguration();config.addConfiguration(appOverrideConfig, APPLICATION_PROPERTIES);config.setContainerConfigurationIndex(config.getIndexOfConfiguration(appOverrideConfig));return config;} 1创建一个ConcurrentCompositeConfiguration实例这个东西其实就是代表了所谓的配置包括了eureka需要的所有的配置。在初始化这个实例的时候调用了clear()方法 public ConcurrentCompositeConfiguration(){clear();}2我们点击clear可以看到 Overridepublic final void clear(){fireEvent(EVENT_CLEAR, null, null, true);configList.clear();namedConfigurations.clear();// recreate the in memory configurationcontainerConfiguration new ConcurrentMapConfiguration();containerConfiguration.setThrowExceptionOnMissing(isThrowExceptionOnMissing());containerConfiguration.setListDelimiter(getListDelimiter());containerConfiguration.setDelimiterParsingDisabled(isDelimiterParsingDisabled());containerConfiguration.addConfigurationListener(eventPropagater);configList.add(containerConfiguration);overrideProperties new ConcurrentMapConfiguration();overrideProperties.setThrowExceptionOnMissing(isThrowExceptionOnMissing());overrideProperties.setListDelimiter(getListDelimiter());overrideProperties.setDelimiterParsingDisabled(isDelimiterParsingDisabled());overrideProperties.addConfigurationListener(eventPropagater);fireEvent(EVENT_CLEAR, null, null, false);containerConfigurationChanged false;invalidate();} fireEvent()发布了一个事件EVENT_CLEARfireEvent()这个方法其实是父类的方法牵扯比较复杂的另外一个项目ConfigurationManager本身不是属于eureka的源码是属于netflix config项目的源码暂不学习。 总的来说就是往ConcurrentCompositeConfiguration实例加入了一堆别的config然后搞完了以后就直接返回了这个实例就是作为所谓的那个配置的单例 四、初始化数据中心的配置如果没有配置的话就是DEFAULT data center String dataCenter ConfigurationManager.getConfigInstance().getString(EUREKA_DATACENTER);if (dataCenter null) {logger.info(Eureka data center value eureka.datacenter is not set, defaulting to default);ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_DATACENTER, DEFAULT);} else {ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_DATACENTER, dataCenter); 五、初始化eurueka运行的环境如果你没有配置的话默认就给你设置为test环境 String environment ConfigurationManager.getConfigInstance().getString(EUREKA_ENVIRONMENT);if (environment null) {ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_ENVIRONMENT, TEST);logger.info(Eureka environment value eureka.environment is not set, defaulting to test);} 六、initEurekaEnvironment的初始化环境的逻辑就结束了 七、流程图 参考Eureka 学习笔记六Eureka初始化环境