一、基本概念
1.命名空间
用于区分环境,开发、测试、生产环境等。
2.配置分组
多个配置文件放在一起,形成组。
3.配置集
一般指一个配置文件
4.配置集ID
这个配置文件全局唯一ID
5.配置项
配置的键值对
二、引入Nacos配置中心
我们在用户模块中实现我们的配置中心
1.引入nacos-config依赖
<!--nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
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,组使用系统默认分组
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<String, Object> getConfig() {
Map<String, Object> configMap = new HashMap<>();
configMap.put("projectName", projectName);
configMap.put("projectAuthor", author);
return configMap;
}
}
5.测试
启动user模块。
我们在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
我们再次访问配置接口:
我们成功读取到了Nacos配置中心的配置。
三、集中配置
1.新建命名空间
2.创建数据源配置
我们在刚才新建的命名空间下新建一个配置user-service-dev.yaml
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));
}
}
我们重新启动项目测试
获取到了预期的结果,测试了Nacos做为配置中心的功能。