a按照nacos官网的说法,在spring-cloud环境下用了nacos配置中心。就得把nacos的信息写到bootstrap.(yml|properties)下去。
之前一直愚蠢的不知道为啥。今天被人问了。就想搞搞清楚。
直接说我的结果把。
因为加载顺序的原因。一般启动程序的时候main方法 都是SpringApplication.run(mainApplication.class,args);
然后会执行到SpringApplication.run方法。这个run方法其实在spirngCloud环境下会跑2次。
简单说下调用。直接run->prepareEnvironment被调用。发送ApplicationEnvironmentPreparedEvent 被BootstrapApplicationListener 接收到。他里面的bootstrapServiceContext
这个方法里我就说会影响的。1
bootstrapMap.put("spring.config.name", configName); 这个东西会影响找配置文件(吐槽一下spring.config.name有个常量的,这里还直接写字符串。有点low了。好歹intern一下呀。)。找配置文件的代码在ConfigFileApplicationListener的getSearchNames()。然后nacos的starter的jar包的factories里有这么一句。
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
所以nacos就会先加载。。