Apollo公共类型的Namespace配置需要进行关联才能用吗?
作者:互联网
点击关注强哥,查看更多精彩文章呀
其实,这个问题在强哥看来应该有稍微深入了解Apollo的使用者应该都能回答的上来。
不过也是前些天,刚好看到公司新来的实习生在找Apollo配置时抓耳挠腮,了解情况之后,我发现,原来这个问题确实有许多人容易弄混。所以,强哥就在这里也简单科普一下。
很多人会被Namespace类型弄混,主要是因为用多了:创建当前项目下的Namespace配置覆盖公共类型的Namespace配置。而慢慢的把公共类型的性质给遗忘了,导致最后觉得:只要想在Apollo上自己的项目下使用公共的配置,就必须在项目下创建个相同名称的Namespace,然后关联上公共配置。如果不进行关联,项目就无法获取到公共类型的Namespace配置。
这点当然是大错特错的。新来的那个实习生就是因为这么认为了,导致他在Apollo上自己项目下找数据库配置信息时,一直找不到账号密码相关的配置,于是又在项目中引用的公共Jar包源码中去找是否在代码中做了默认配置的处理。最后在代码中也没有找到,导致怀疑人生,在一旁直呼见鬼。
其实,Apollo的Namespace主要分成三种类型:私有类型、关联类型和公共类型。而在创建Namespace的时候,只要你将它配置为公共类型,那它就相当于应用到了所有的Apollo项目上,而不需要进行关联配置。
也正因如此,我们在创建公共Namespace时必须多想想,是不是说这些配置就是要应用到所有项目上。否则,如果滥用公共Namespace,也会造成很多代码发生奇奇怪怪的问题。
用一个官网的例子来解释下三种类型的关系:
如下图所示,有三个应用:应用A、应用B、应用C。
应用A有两个私有类型的Namespace:application和NS-Private,以及一个关联类型的Namespace:NS-Public。
应用B有一个私有类型的Namespace:application,以及一个公共类型的Namespace:NS-Public。
应用C只有一个私有类型的Namespace:application
那么,我们分别在三个应用中获取配置时,结果如下:
应用A获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v11
appConfig.getProperty("k2", null); // k2 = v21
//NS-Private
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", null); // k1 = v3
privateConfig.getProperty("k3", null); // k3 = v4
//NS-Public,覆盖公共类型配置的情况,k4被覆盖
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v6 cover
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
应用B获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v12
appConfig.getProperty("k2", null); // k2 = null
appConfig.getProperty("k3", null); // k3 = v32
//NS-Private,由于没有NS-Private Namespace 所以获取到default value
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", "default value");
//NS-Public
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v5
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
应用C获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v12
appConfig.getProperty("k2", null); // k2 = null
appConfig.getProperty("k3", null); // k3 = v33
//NS-Private,由于没有NS-Private Namespace 所以获取到default value
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", "default value");
//NS-Public,公共类型的Namespace,任何项目都可以获取到
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v5
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
好啦,相信通过这个例子,大家也就能更好的理解Apollo的Namespace三种类型的意义。
大家也要记得,在遇到不符合自己理解的知识点的问题时,最好是能够去官网等地方找找权威的解释。而不要一味的埋进自己理解有误的思维的牛角尖无法自拔。
点击关注强哥,查看更多精彩文章呀
标签:Apollo,getProperty,NS,Namespace,关联,null,publicConfig 来源: https://www.cnblogs.com/breakingdawn/p/15899331.html