面试题答案
一键面试配置方式
- DataId 命名规范:通过在 DataId 中体现环境信息来区分不同环境的配置。例如,约定 DataId 格式为
${spring.application.name}-${spring.profiles.active}.properties
。比如,对于一个名为example
的服务,开发环境的 DataId 可以是example-dev.properties
,测试环境是example-test.properties
,生产环境是example-prod.properties
。这样每个环境有自己独立的配置文件,实现配置隔离。 - Group 分组:可以利用 Nacos 的 Group 来进一步对配置进行分组管理。不同环境的配置可以放在不同 Group 中,比如开发环境配置放在
DEV_GROUP
,测试环境放在TEST_GROUP
,生产环境放在PROD_GROUP
。同时也可以设置一个公共的 Group 如DEFAULT_GROUP
存放共享配置。 - 共享配置:对于一些公共的配置,如数据库连接的基本信息(除了密码等敏感信息,这些可能不同环境有差异),可以创建一个不带环境后缀的 DataId,例如
example.properties
,将其放在公共的 Group 中(如DEFAULT_GROUP
)。在应用启动时,Nacos 客户端会按照一定顺序加载配置,先加载公共配置,再加载环境特定配置,实现配置的共享与覆盖。 - Spring 配置文件配置:在 Spring 应用的
bootstrap.properties
或bootstrap.yml
文件中配置 Nacos 相关信息,指定 DataId 和 Group。例如:
spring:
application:
name: example
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: properties
shared-dataids: example.properties
refreshable-dataids: example.properties
data-id: ${spring.application.name}-${spring.profiles.active}.properties
group: ${spring.profiles.active}_GROUP
上述配置中,shared-dataids
指定了共享配置的 DataId,refreshable-dataids
表示这些共享配置支持动态刷新,data-id
和 group
根据当前激活的 Spring 配置文件动态获取对应环境的配置。
相关原理
- 配置获取顺序:Nacos 客户端在启动时,会根据配置的 DataId 和 Group 从 Nacos 服务器获取配置信息。先获取共享配置(如
example.properties
),然后再获取环境特定配置(如example-dev.properties
)。如果有相同的配置项,环境特定配置会覆盖共享配置,从而实现配置的隔离与共享。 - 动态刷新原理:Nacos 采用长轮询机制实现配置的动态刷新。客户端向 Nacos 服务器发起长轮询请求,服务器会保持连接一段时间。当配置发生变化时,服务器会主动推送变更给客户端,客户端收到变更后,会重新加载配置并通知相关的 Bean 进行更新,实现配置的动态生效。