eureka sersver 配置環(huán)境
在上一篇中已經(jīng)介紹了,spring boot 是調(diào)用 類的 方法啟動(dòng) Eureka Server 的。
public void contextInitialized(ServletContextEvent event) {
initEurekaEnvironment();
initEurekaServerContext();
// 省略不重要的代碼
}
初始化環(huán)境和加載配置文件在方法 initEurekaEnvironment 方法中,一起來(lái)看看吧。
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");
}
- ConfigurationManager 的創(chuàng)建會(huì)加載一堆 config,這里不需要去看這一塊。
- 單例模式其實(shí)有很多種,如:餓漢模式、懶漢模式、雙重校驗(yàn)鎖、靜態(tài)內(nèi)部類、枚舉等實(shí)現(xiàn)方式,這里 getConfigInstance() 方法用的是 volatile + synchronized + double check 雙重校驗(yàn)鎖模式。
- 最后獲取 eureka server 的運(yùn)行環(huán)境,沒(méi)有配置運(yùn)行環(huán)境就用 test 環(huán)境。如讀取配置文件用:eureka-server-test.properties
面向接口
EurekaServerConfig 接口
initEurekaServerContext() 方法用于加載 Eureka Server 上下文。這個(gè)方法很長(zhǎng),先說(shuō)他的第一行代碼:
EurekaServerConfig eurekaServerConfig = new DefaultEurekaServerConfig();
這行代碼創(chuàng)建了一個(gè) EurekaServerConfig 對(duì)象。EurekaServerConfig 是一個(gè)接口。定義了許多配置項(xiàng)的方法。
這個(gè)類的作用就是,如果以后需要用到配置文件里面的數(shù)據(jù)只要:eurekaServerConfig.getXXX() 就能獲取,而不是像平常使用的 Properties。
DefaultEurekaServerConfig 默認(rèn)實(shí)現(xiàn)類
public DefaultEurekaServerConfig() {
init();
}
DefaultEurekaServerConfig 是 eurekaServerConfig 的默認(rèn)實(shí)現(xiàn)類。
init()
init() 的前面兩行是設(shè)置環(huán)境的名稱。
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 的值,默認(rèn)值是:eureka-server。
private static final DynamicStringProperty EUREKA_PROPS_FILE = DynamicPropertyFactory
.getInstance().getStringProperty("eureka.server.props",
"eureka-server");
loadCascadedPropertiesFromResources() 方法是用來(lái)加載配置文件的。
首先會(huì)在 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" 的配置文件。并且下面的配置文件會(huì)覆蓋上面的配置文件
String envConfigFileName = configName + "-" + environment + ".properties";
props.putAll(envProps);
最后將配置文件交給了 ConfigurationManager 管理。
eureka.server.properties
eureka.server.properties 的作用就是為配置文件里面的各個(gè)選項(xiàng)搞一個(gè)默認(rèn)值。但是它是一個(gè)空文件。
回過(guò)頭來(lái)看 DefaultEurekaServerConfig,它才是真正的默認(rèn)實(shí)現(xiàn)的地方。
總結(jié)
- initEurekaEnvironment() 是讀取環(huán)境,為下面的加載配置文件做準(zhǔn)備。
- DefaultEurekaServerConfig 類是 EurekaServerConfig 接口的默認(rèn)實(shí)現(xiàn),里面就是默認(rèn)的配置項(xiàng)。
- DefaultEurekaServerConfig 的init() 方法先讀取 eureka-server.props 后讀取 eureka-server-test.properties 配置文件。
-
接口
+關(guān)注
關(guān)注
33文章
8933瀏覽量
153189 -
Server
+關(guān)注
關(guān)注
0文章
94瀏覽量
24529 -
文件
+關(guān)注
關(guān)注
1文章
578瀏覽量
25196 -
eureka
+關(guān)注
關(guān)注
0文章
4瀏覽量
1798
發(fā)布評(píng)論請(qǐng)先 登錄
ICD配置文件的詳細(xì)介紹和配置內(nèi)容的詳細(xì)概述

配置文件和例程文件的使用

SpringBoot配置文件application
Eureka Client的創(chuàng)建案例

評(píng)論