天天看点

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

1、前言

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

如果微服务架构中没有使用统一配置中心时,所存在的问题:

配置文件分散在各个项目里,不方便维护

配置内容安全与权限

更新配置后,项目需要重启

nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。

本文章以前面讲的内容为基础。

微服务的搭建

https://blog.csdn.net/supersolon/article/details/117709129?spm=1001.2014.3001.5501

nacos的安装

https://blog.csdn.net/supersolon/article/details/117521085?spm=1001.2014.3001.5501

nacos实现注册中心

https://blog.csdn.net/supersolon/article/details/117824599?spm=1001.2014.3001.5501

今天继续讲SpringCloud整合Nacos实现配置中心

2、Nacos配置中心服务

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

还是以iot-usercenter服务为例进行讲解(iot-common步骤一样,不再赘述)。

2.1Nacos新建配置

点击Nacos-【配置管理】-【配置列表】-【+】按钮,弹出新建配置页面。

在页面中添加user信息,设置user的name、age信息。

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

Data ID:一般为服务名

Group:默认为DEFALT_GROUP

配置模式:YAML

配置内容:

name: wangshanshan-usercenter

age: 11

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置
SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

2.2配置pom.xml文件

2.2.1父工程pom文件

引入spring-cloud-alibaba的依赖

<!-- 声明依赖 springCloudAlibaba -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
           

2.2.2子工程pom文件

iot-usercenter模块的pom.xml文件中,添加nacos配置中心依赖

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

代码如下:

<!-- nacos 配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
           

添加完依赖后,点击右上角的Load Maven Changers按钮,使新引入的依赖生效。

2.3配置application.yml文件

application.yml文件,添加nacos配置服务信息以及user信息。

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

代码如下:

server:
  port: 9091

spring:
  application:
    name: iot-usercenter
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml  # 必须修改成yaml
        group: DEFAULT_GROUP  # 缺省即可
        prefix: ${spring.application.name} # 缺省即可
user:
  name: lisi-application
  age: 19
           

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

2.4Controller类添加@RefreshScope注解

添加 @RefreshScope 注解实现配置的动态刷新

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

代码如下:

package com.iot.usercenter.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {

//    private String name = "lisi";
//    private String age = "19";

    //引入@RefreshScope注解,值从配置文件获取
    @Value("${user.name}")
    private String name;
    @Value("${user.age}")
    private String age;

    //登录
    @RequestMapping("/login")
    public String login(){

        String msg =" I am " + name + " , I am " + age + " years old!";
        System.out.println(msg);
        return msg;
    }
}
           

2.5重启并访问服务

2.5.1重启

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

2.5.2访问

访问服务,获取到nacos配置里的user信息,跟nacos配置的信息一致。

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

6.6更新配置查看效果

更新配置

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

刷新查看信息,信息根据配置进行更新。

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

3、Nacos多个服务共用一个配置

比如有一个产品环境,多个服务共用一套信息的情况下,可以创建一个iot-product的配置。

配置文件中nacos.config.prefix统一配置为iot-product。

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

​​​​​​​3.1添加公共配置

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置
SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

​​​​​​​3.2修改bootstrap.yml配置文件

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

bootstrap.yml配置文件内容如下:

server:
  port: 9091

spring:
  application:
    name: iot-usercenter
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml  # 必须修改成yaml
        group: DEFAULT_GROUP  # 缺省即可
        prefix: iot-product # 缺省即可
user:
  name: lisi-bootstrap
  age: 19
           

​​​​​​​3.3、配置生效

SpringCloud整合Nacos实现配置中心2、Nacos配置中心服务3、Nacos多个服务共用一个配置

继续阅读