Dubbo的配置其實(shí)已經(jīng)在[官網(wǎng)](http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
)說(shuō)的很詳細(xì)了命浴。
分為以下三類:
1.Xml配置
2.API配置
3.注解配置
配置之間的關(guān)系
配置之間的關(guān)系.png
不同粒度配置的覆蓋關(guān)系
- 方法級(jí)優(yōu)先,接口級(jí)次之贱除,全局配置再次之生闲。
- 如果級(jí)別一樣,則消費(fèi)方優(yōu)先月幌,提供方次之碍讯。
配置覆蓋關(guān)系的優(yōu)先級(jí)
1.JVM System Properties,-D參數(shù)
2.Externalized Configuration扯躺,外部化配置
3.ServiceConfig捉兴、ReferenceConfig等編程接口采集的配置
4.本地配置文件dubbo.properties
image.png
Dubbo的Config的源碼結(jié)構(gòu)圖
image.png
AbstractInterfaceConfig
AbstractInterfaceConfig是抽象類,ConsumerConfig和ProviderConfig都實(shí)現(xiàn)了它录语。先看看這里的源碼
checkRegisty()源碼
protected void checkRegistry() {
// 當(dāng) RegistryConfig 對(duì)象數(shù)組為空時(shí)倍啥,若有 `dubbo.registry.address` 配置,進(jìn)行創(chuàng)建澎埠。
// for backward compatibility 向后兼容
if (registries == null || registries.isEmpty()) {
String address = ConfigUtils.getProperty("dubbo.registry.address");
if (address != null && address.length() > 0) {
registries = new ArrayList<RegistryConfig>();
String[] as = address.split("\\s*[|]+\\s*");
for (String a : as) {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress(a);
registries.add(registryConfig);
}
}
}
if ((registries == null || registries.isEmpty())) {
throw new IllegalStateException((getClass().getSimpleName().startsWith("Reference")
? "No such any registry to refer service in consumer "
: "No such any registry to export service in provider ")
+ NetUtils.getLocalHost()
+ " use dubbo version "
+ Version.getVersion()
+ ", Please add <dubbo:registry address=\"...\" /> to your spring config. If you want unregister, please set <dubbo:service registry=\"N/A\" />");
}
// 讀取環(huán)境變量和 properties 配置到 RegistryConfig 對(duì)象數(shù)組虽缕。
for (RegistryConfig registryConfig : registries) {
appendProperties(registryConfig);
}
}