Nacos配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml
    例如:userservice-dev.yaml
  • [spring.application.name].yaml
    例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

1、添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:
在这里插入图片描述

2、在user-service中读取共享配置

这是一个属性配置类,专门接收属性,实现热更新的。
在user-service服务中,修改PatternProperties类,读取新添加的属性:
在这里插入图片描述
配置controller类,直接返回这个配置类.
在这里插入图片描述

3、运行两个UserApplication,使用不同的profile

在这里插入图片描述
在这里插入图片描述
这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

4、结论

启动UserApplication和UserApplication2.
访问http://localhost:8081/user/prop,结果:
在这里插入图片描述
访问http://localhost:8082/user/prop,结果:
在这里插入图片描述
可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

5、配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:
在这里插入图片描述

### Nacos 配置共享实现方式 Nacos配置共享功能通过 `shared-configs` 字段来定义多个数据 ID (dataId),这些数据 ID 可以被不同的微服务实例所共享。这种方式使得不同服务可以访问相同的配置文件,从而减少重复配置的工作量并提高维护效率。 以下是基于提供的示例代码展示如何实现 Nacos 配置共享: #### 示例代码解析 在 Spring Boot 应用程序中,可以通过如下 YAML 配置启用 Nacos共享配置功能[^1]: ```yaml spring: application: name: customer-server # 定义服务名称 profiles: active: dev # 激活开发环境 cloud: nacos: server-addr: 192.168.230.131 # 设置 Nacos 地址 config: file-extension: yaml # 使用 YAML 格式的配置文件 shared-configs: # 定义共享配置列表 - dataId: shared-jdbc.yaml # 共享 JDBC 数据库连接配置 ``` 上述配置表示当前应用会加载名为 `shared-jdbc.yaml` 的共享配置文件。此文件的内容可以在 Nacos 控制台中创建,并存储通用的数据库连接字符串或其他全局参数。 #### 关键点说明 1. **DataID**: 在 Nacos 中,每个配置项都有唯一的 DataID 来标识它。对于共享配置而言,通常将其命名为具有特定含义的名字(如 `shared-jdbc.yaml`),以便于识别其用途。 2. **Namespace 和 Group**: 如果项目涉及多套独立运行的环境,则可通过设置命名空间 (Namespace)[^4] 或分组 (Group) 进一步区分各个环境下的相同 DataID 下的不同版本配置。 3. **动态刷新机制**: 当修改了某个共享配置之后,无需重启任何依赖该配置的服务即可完成实时生效操作。这是因为 Spring Cloud Alibaba 提供了一个监听器用于检测远程服务器上的变化事件并将最新值同步到本地缓存里去[^2]。 #### Java端获取共享配置方法演示 下面给出一段简单的Java代码片段用来读取来自上面提到过的那个叫做`shared-jdbc.yaml`的数据源信息: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigController { @Value("${jdbc.url}") private String jdbcUrl; @GetMapping("/getJDBC") public String getJDBC(){ return "The current database connection URL is:" + jdbcUrl ; } } ``` 在此案例当中,我们假设`shared-jdbc.yaml`里面包含了类似于这样的条目:`jdbc.url=jdbc:mysql://localhost/testdb`,那么当调用接口 `/getJDBC`的时候就会返回相应的URL地址. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值