8.1 基本使用
8.1.1. 引入依赖
我们在device服务中引入nacos-config依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
8.1.2 创建配置文件,指定nacos配置中心地址
创建bootstrap.yml作为配置文件,指定nacos配置中心地址
spring:
application:
name: smart-device
cloud:
nacos:
config:
server-addr: 192.168.56.200:8848 # nacos配置中心地址
file-extension: yaml # 配置文件格式
profiles:
active: dev # 开发环境
8.1.3 在nacos配置中心添加配置内容
在nacos配置中心控制台,新建配置的Data ID为smart-device-dev.yaml,
【注意】:新建配置的Data ID命名规则:服务名称-环境.配置文件格式
把之前device服务的application.yaml中的配置内容复制到nacos新建配置中。
nacos配置中心-新建配置
最后注释application.yaml中的配置内容,启动device服务,验证可以读取到nacos配置中心的配置内容。
@RestController
@RequestMapping("/device")
@Slf4j
public class DeviceController {
@Value("${server.port}")
private String port;
@GetMapping("/testNacos")
public void testNacos() {
log.info("port:{}", port);
}
可以看到读取到了nacos配置中心的port端口配置。
读取nacos配置中心中的配置
8.2 配置动态刷新
当nacos配置修改之后,程序是无法读取到修改之后的配置。当开启动态刷新,修改nacos配置之后,就可以读取到最新修改的配置值。
只需要在需要读取配置的类上加上动态刷新注解@RefreshScope
@RestController
@RequestMapping("/device")
@Slf4j
@RefreshScope
public class DeviceController {
@Value("${server.port}")
private String port;
@GetMapping("/testNacos")
public void testNacos() {
log.info("port:{}", port);
}
}
新修改了port为8081,我们看到程序读取到了新的port。
新修改了port为8081
程序读取到了新的port
8.2 配置共享
在不同微服务之间一般会存在一些公共的重复配置,我需要把这写配置单独放在一个公共配置中,然后各个微服务工程引入。
8.2.1 创建公共的共享配置
Data ID:为common.yaml,公共配置如下,主要是数据源和nacos注册中心等公共配置:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.56.200:3306/device?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: password
# nacos地址
cloud:
nacos:
discovery:
server-addr: 192.168.56.200:8848
公共配置
8.2.2 引入公共配置
在device服务工程配置文件中,引入公共配置
spring:
application:
name: smart-device
cloud:
nacos:
config:
server-addr: 192.168.56.200:8848 # nacos配置中心地址
file-extension: yaml # 配置文件格式
shared-dataids: common.yaml # 要引入的公共配置
refreshable-dataids: common.yaml # 指定要实现动态配置刷新的配置
profiles:
active: dev # 环境:开发环境
8.2.3 启动device服务测试
删除device工程原有配置文件中公共的配置,例如数据源配置。然后启动device服务,测试能否读取到公共配置中的datasource数据源配置。
@RestController
@RequestMapping("/device")
@Slf4j
@RefreshScope
public class DeviceController {
@Value("${spring.datasource.username}")
private String username;
@GetMapping("/testNacosCommon")
public void testNacosCommon() {
log.info("username:{}", username);
}
}
我们看到读取到了公共配置中的spring.datasource.username数据源用户名了。
读取到公共配置了