1. 了解多环境配置共享
众所周知,一个项目从设计到开发到上线和运维,有多种环境(如测试环境,运行环境....)
那如果有些配置,不管在什么环境下,都使用统一参数,这类配置,能不能共享配置?以免同一份配置写好几份,增大了重复度和工作量。
其实微服务启动时,会去Nacos读取多个配置文件,比如:
-
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml -
[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含环境,因此可以被多个环境共享
接下来我们去试试写个案例来测试多环境配置共享
2. Nacos实现多环境配置共享
2.1. 添加一个环境共享配置
在Nacos的配置列表中,添加:
2.2. 在user-service中读取共享配置
在user-service中修改PatternProperties类,添加新的属性:
在user-service服务中,修改UserController,添加一个方法:
2.3. 重启两个userApplication,并且将第二个的配置改成test环境
这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。
访问http://localhost:8081/user/prop,结果:
访问http://localhost:8082/user/prop,结果:
结果:
两个实例处于不同的环境,dateformat属于dev环境的配置,而envSHaredValue属于共享环境的配置。
所以此时处于dev环境的8081端口的实例的dateformat和envSharedValue都有值。而处于test环境的8082端口的实例的dateformat没有值,而envSharedValue有值。
可以看出来,不管是处于dev环境还是test环境,都读取到了共享环境配置envSharedValue的值
3.配置共享的优先级
当Nacos,本地yml配置文件同时出现相同属性值时,优先级有高低之分:
优先级由高到低:
远程的当前环境配置 > 远程的共享环境配置 > 本地配置