SpringCloud Alibaba入门6之Nacos配置

一、基本概念

1.命名空间

用于区分环境,开发、测试、生产环境等。

2.配置分组

多个配置文件放在一起,形成组。

3.配置集

一般指一个配置文件

4.配置集ID

这个配置文件全局唯一ID

5.配置项

配置的键值对

SpringCloud Alibaba入门6之Nacos配置_第1张图片

 

二、引入Nacos配置中心

我们在用户模块中实现我们的配置中心

1.引入nacos-config依赖



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config

2.配置文件

我们新建一个配置文件bootstrap.yml,和SpringCloud Conig类似,我们必需要在 bootstrap.yml配置文件中进行配置,在application.yml中无效,bootstrap.yml优先级高于application.yml,配置如下:

spring:
  application:
    name: user-service #应用名称
  profiles:
    active: dev #当前环境
  cloud:
    nacos:
      config:
        enabled: true  # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
        server-addr: 127.0.0.1:8848 # Nacos Server 地址
        group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
        file-extension: yaml  # 配置内容的数据格式,默认为 properties

3.Nacos Server创建配置

我们在Nocos的配置管理中添加一个配置,Data ID为user-service.yaml,组使用系统默认分组

SpringCloud Alibaba入门6之Nacos配置_第2张图片

 4.控制层测试

通过@Value获取配置信息,使用@RefreshScope注解实现配置自动更新

package com.example.myshop.controller;

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

import java.util.HashMap;
import java.util.Map;

/**
 * @author qx
 * @date 2023/06/23
 * @desc nacos配置测试
 */
@RestController
@RequestMapping("/user")
@RefreshScope
public class NacosConfigController {

    @Value("${project.name:}")
    private String projectName;

    @Value("${project.author:}")
    private String author;


    @GetMapping("/config")
    public Map getConfig() {
        Map configMap = new HashMap<>();
        configMap.put("projectName", projectName);
        configMap.put("projectAuthor", author);
        return configMap;
    }
}

5.测试

启动user模块。

SpringCloud Alibaba入门6之Nacos配置_第3张图片

 我们在Nacos控制台修改配置项,并发布。 可以看到控制台打印输出了配置修改的信息

2023-06-23 10:48:52.258  INFO 9436 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [project.author]
2023-06-23 10:48:52.258  INFO 9436 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData   : [fixed-127.0.0.1_8848] [notify-ok] dataId=user-service.yaml, group=DEFAULT_GROUP, md5=a6172172fee5eccfce73aa3366cf10df, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@a294503 
2023-06-23 10:48:52.258  INFO 9436 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData   : [fixed-127.0.0.1_8848] [notify-listener] time cost=717ms in ClientWorker, dataId=user-service.yaml, group=DEFAULT_GROUP, md5=a6172172fee5eccfce73aa3366cf10df, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@a294503 

我们再次访问配置接口:

SpringCloud Alibaba入门6之Nacos配置_第4张图片

 我们成功读取到了Nacos配置中心的配置。

三、集中配置

1.新建命名空间

SpringCloud Alibaba入门6之Nacos配置_第5张图片

 2.创建数据源配置

我们在刚才新建的命名空间下新建一个配置user-service-dev.yaml

SpringCloud Alibaba入门6之Nacos配置_第6张图片

SpringCloud Alibaba入门6之Nacos配置_第7张图片 

 SpringCloud Alibaba入门6之Nacos配置_第8张图片

3.修改项目配置

 指定刚才新建的命名空间名称namespace

spring:
  application:
    name: user-service #应用名称
  profiles:
    active: dev #当前环境
  cloud:
    nacos:
      config:
        enabled: true  # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
        server-addr: 127.0.0.1:8848 # Nacos Server 地址
        group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
        file-extension: yaml  # 配置内容的数据格式,默认为 properties
        namespace: dev_space #指定命名空间 默认为public

并且注销配置文件中的相关数据库配置

spring:
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://127.0.0.1:3306/myshop?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
#    username: root
#    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

 4.测试

控制器的示例代码如下:

package com.example.myshop.controller;

import com.example.myshop.common.CommonResult;
import com.example.myshop.entity.User;
import com.example.myshop.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author qx
 * @date 2023/06/21
 * @desc 用户控制层
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 添加用户
     */
    @PostMapping("/add")
    public CommonResult addUser(@RequestBody User user) {
        userService.saveUser(user);
        return CommonResult.success();
    }

    /**
     * 根据id获取用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    @GetMapping("/{id}")
    public CommonResult getUserById(@PathVariable Long id) {
        return CommonResult.success(userService.getUserById(id));
    }


}

我们重新启动项目测试

SpringCloud Alibaba入门6之Nacos配置_第9张图片

 获取到了预期的结果,测试了Nacos做为配置中心的功能。

 

你可能感兴趣的:(SpringCloud,spring,cloud,spring,java)