采用 SpringCloud
架构,使用 Zookeeper
作为注册中心和配置中心。
配置文件采用 bootstrap.yml
放置于 jar 中外部不存在 bootstrap.yml
文件,所有非需要更改配置放置于 bootstrap
中,需要更改的放置于 application.yml
包括 zookeeper
的连接地址等信息。
1-
2|--bin
3|--cfg
4| |--application.yml
5|--lib
6| |--*.jar
7| | |--bootstrap.yml
当我启动项目时,项目在不停的尝试连接 Zookeeper
,但是尝试的是 localhost
也就是尝试连接本地的 Zookeeper
但是我的 Zookeeper
是启动在服务器上的,这样尝试连接时一直失败造成项目无法启动。
追踪代码时发现项目启动时会使用 BootStrap 加载配置系统,这时 Zookeeper
的配置信息还未进入到变量上下文中(以 BootStrap
加载的配置只能使用 bootstrap.yml
中的信息),造成使用 localhost
作为 Zookeeper
的地址
修改了原始代码,改为采用进入到 PropertySourceLocator
中之后再产生 Zookeeper
连接,因为此时 application.yml
和 bootstrap.yml
全部加载完毕(这两个是最早加载的),在此时可以正常获取到 Zookeeper
的地址