Nacos配置管理
一、在Nacos添加公共配置
二、项目中读取方式
1. 引入nacos-config依赖
首先,在要使用 nacos 来管理配置的服务中,引入nacos-config 依赖:
<!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2. 添加 bootstrap.yaml
在项目中添加一个 bootstrap.yaml 文件,这个文件是引导文件,优先级高于 application.yml,内容如下:
spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名
- 首先根据 spring.cloud.nacos.server-addr 获取 nacos 地址
- 然后根据 `${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}` 作为文件id,来读取配置
- 本例中,就是去读取`userservice-dev.yaml`
- 注意,bootstrap.yaml 中的配置不要与 application.yml 文件中重复,如果两个文件同时使用,则应删除 application.yml 中与 bootstrap.yaml 文件重复的配置
三、测试配置是否生效
import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; /** * 路径: /user/110 * * @param id 用户id * @return 用户 */ @GetMapping("/{id}") public User queryById(@PathVariable("id") Long id) { return userService.queryById(id); } @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } }
四、配置热更新
1. 方式一:在项目中用到配置的类上添加注解 @RefreshScope
import org.springframework.cloud.context.config.annotation.RefreshScope; @RefreshScope public class 。。。{ }
2. 方式二:使用 @ConfigurationProperties 注解代替 @Value 注解
1)如果出现警告,则补充依赖即可
补充下面依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
2)具体使用方式
添加 PatternProperties 配置类
package cn.itcast.user.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }
使用配置类中的配置
import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import cn.itcast.user.config.PatternProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") //@RefreshScope public class UserController { @Autowired private UserService userService; @Autowired private PatternProperties properties; /** * 路径: /user/110 * * @param id 用户id * @return 用户 */ @GetMapping("/{id}") public User queryById(@PathVariable("id") Long id) { return userService.queryById(id); } @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat())); } }
五、多环境配置共享
1. 如何添加多环境配置
微服务启动时会从nacos读取多个配置文件:
- [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
- [spring.application.name].yaml,例如:userservice.yaml
无论 profile 如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件
2. 多个配置文件之间的优先级
从高到底分别是:服务名-profile.yaml > 服务名.yaml > 本地配置(application.yml)
六、多服务共享配置
1. 配置方式
不同微服务之间可以共享配置文件,通过下面的两种方式来指定:
方式一:
spring: application: name: userservice # 服务名称 profiles: active: dev # 环境, cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名 shared-configs: # 多微服务间共享的配置列表 - dataId: common.yaml # 要共享的配置文件id
方式二:
spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名 extension-configs: # 多微服务间共享的配置列表 - dataId: extend.yaml # 要共享的配置文件id
2. 多种配置的优先级
* 注:学自黑马