在上一篇中已经介绍了,spring boot 是调用 类的 方法启动 Eureka Server 的。
public void contextInitialized(ServletContextEvent event) {
initEurekaEnvironment();
initEurekaServerContext();
// 省略不重要的代码
}
初始化环境和加载配置文件在方法 initEurekaEnvironment 方法中,一起来看看吧。
String dataCenter = ConfigurationManager.getConfigInstance().getString(EUREKA_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");
}
initEurekaServerContext() 方法用于加载 Eureka Server 上下文。这个方法很长,先说他的第一行代码:
EurekaServerConfig eurekaServerConfig = new DefaultEurekaServerConfig();
这行代码创建了一个 EurekaServerConfig 对象。EurekaServerConfig 是一个接口。定义了许多配置项的方法。
这个类的作用就是,如果以后需要用到配置文件里面的数据只要:eurekaServerConfig.getXXX() 就能获取,而不是像平常使用的 Properties。
public DefaultEurekaServerConfig() {
init();
}
DefaultEurekaServerConfig 是 eurekaServerConfig 的默认实现类。
init() 的前面两行是设置环境的名称。
private void init() {
String env = ConfigurationManager.getConfigInstance().getString(
EUREKA_ENVIRONMENT, TEST);
ConfigurationManager.getConfigInstance().setProperty(
ARCHAIUS_DEPLOYMENT_ENVIRONMENT, env);
String eurekaPropsFile = EUREKA_PROPS_FILE.get();
//省略try...catch..
ConfigurationManager
.loadCascadedPropertiesFromResources(eurekaPropsFile);
}
EUREKA_PROPS_FILE 的定义是用单例工厂模式获取 eureka.server.props 的值,默认值是:eureka-server。
private static final DynamicStringProperty EUREKA_PROPS_FILE = DynamicPropertyFactory
.getInstance().getStringProperty("eureka.server.props",
"eureka-server");
loadCascadedPropertiesFromResources() 方法是用来加载配置文件的。
首先会在 ConfigurationManager.loadCascadedProperties() 方法里面加载 eureka-server.props 配置文件
String defaultConfigFileName = configName + ".properties";
// 省略一部分代码
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource(defaultConfigFileName);
Properties props = getPropertiesFromFile(url);
然后再加载 configName + "-" + environment + ".properties" 的配置文件。并且下面的配置文件会覆盖上面的配置文件
String envConfigFileName = configName + "-" + environment + ".properties";
props.putAll(envProps);
最后将配置文件交给了 ConfigurationManager 管理。
eureka.server.properties 的作用就是为配置文件里面的各个选项搞一个默认值。但是它是一个空文件。
回过头来看 DefaultEurekaServerConfig,它才是真正的默认实现的地方。
全部0条评论
快来发表一下你的评论吧 !