23. SpringCloudAlibaba 服务配置中心项目集成
引入依赖
在每一个微服务引入服务配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
修改应用配置
在每一个微服务的 application.yaml 文件中,添加配置中心相关配置
spring:
application:
name: server-user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: user_group
profiles:
active: dev
配置 Nacos
在 Nacos 菜单页面的配置管理-配置列表中添加配置,配置内容如下:

- Data ID就是配置集ID,通常情况下就是某个配置文件的ID,这个ID的命名遵循一定的规则,如下所示。
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- 这里,对应到用户微服务的Data ID就是:
server-user-dev.yaml。所以,对于用户微服务来说,我们在Data ID中输入server-user-dev.yaml。 - Group:配置分组,配置分组要与
spring.cloud.nacos.config.group对应,用户微服务的配置分组就是user_group。 - 描述:对当前配置的简单描述。例如,用户微服务的开发环境配置。
- 配置格式:表示配置内容所使用的文件格式,这里我们选择YAML格式。
- 配置内容:配置文件的内容,这里我们直接将application.yml文件的内容复制进去即可。
配置好之后点击页面的发布按钮,发布成功后会跳转到配置管理-配置列表界面。
实现动态刷新
注入配置
在用户微服务 shop-user 的下新建 NacosController 类,并在 NacosController 类中注入 org.springframework.context.ConfigurableApplicationContext 类,通过 ConfigurableApplicationContext 获取到系统环境变量,并从环境变量中获取到 author.name 属性的值,就是我们在 Nacos 中配置的名称
@Slf4j
@RestController
public class NacosController {
@Autowired
private ConfigurableApplicationContext context;
@GetMapping("/nacos/test")
public String nacosTest(){
String authorName = context.getEnvironment().getProperty("author.name");
log.info("获取到的作者姓名为:{}", authorName);
return authorName;
}
}
修改 Nacos 配置
修改 Nacos 配置,添加 author.name 配置

测试效果

修改配置,但是不重启 server-user

测试效果

通过注解方式获取 Nacos 配置
在用户微服务 shop-user 的 NacosController 类上添加@RefreshScope 注解,并将 Nacos 中的 author.name 的值注入到 NacosController 类中,并通过接口获取到注入的 Nacos 中的 author.name 值,如下所示。
@Slf4j
@RefreshScope
@RestController
public class NacosController {
@Autowired
private ConfigurableApplicationContext context;
@Value("${author.name}")
private String nacosAuthorName;
@GetMapping("/nacos/test")
public String nacosTest(){
String authorName = context.getEnvironment().getProperty("author.name");
log.info("获取到的作者姓名为:{}", authorName);
return authorName;
}
@GetMapping("/nacos/name")
public String nacosName(){
log.info("从Nacos中获取到的作者的姓名为:{}", nacosAuthorName);
return nacosAuthorName;
}
}
修改 Nacos 配置

查看效果

修改 Nacos 配置

查看效果

实现配置共享
单服务多环境实现共享
实现单服务多环境实现共享,通常可以通过命名空间和分组来实现不同环境的配置隔离。
使用命名空间
- 登录 Nacos 控制台。
- 在左侧菜单中选择“命名空间”。
- 点击“创建命名空间”按钮,为每个环境(如开发、测试、生产)创建一个命名空间。
- 将不同环境的配置放在不同的命名空间中,比如 dev、test、prod。
使用配置分组
- 创建配置分组:
- 在创建或编辑配置时,您可以指定一个分组名称,比如
DEFAULT_GROUP或自定义的组名。 - 不同环境可以使用不同的分组名,但更常见的做法是使用命名空间来区分环境。
- 在创建或编辑配置时,您可以指定一个分组名称,比如
配置环境变量或启动参数
在 application.yml 配置分组和命名空间
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
namespace: ${NACOS_NAMESPACE:default}
group: ${NACOS_GROUP:DEFAULT_GROUP}
在启动时,配置环境变量
--NACOS_NAMESPACE=your_namespace_id
--NACOS_GROUP=your_group_name
多服务配置实现共享
- 在Nacos中新建一个以server-all.yaml为Data ID的配置,配置中的主要内容为用户微服务、商品微服务和订单微服务共有的配置
- 在每个微服务配置自己的 application.yaml 配置
- 在每个微服务的 bootstrap.yaml 文件添加共享配置
```JavaScript
spring:
application:
name: server-product
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: product_group
shared-configs[0]:
data_id: server-all.yaml
group: all_group
refresh: true
profiles:
active: dev

浙公网安备 33010602011771号