1.配置管理
- Nacos除了可以做注册中心,同样可以做配置管理来使用。可以集中管理所有实例的配置。Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
- 在nacos中添加配置文件
- 填写配置信息
- 项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
- 引入nacos-config依赖,在user-service服务中,引入nacos-config的客户端依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 添加bootstrap.yml,在user-service中添加一个bootstrap.yml文件
spring:
application:
name: user-service # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
-
检测是否成功读取nacos配置文件
- 在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置
@Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("/now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } }
- 页面访问,查看结果
- 配置获取的步骤
2.配置热更新
-
修改nacos中的配置后,微服务中无需重启即可让配置生效
-
实现配置热更新,可以使用两种方式
-
@Value注入的变量所在类上添加注解@RefreshScope
-
使用@ConfigurationProperties注解代替@Value注解
- 在user-service服务中,添加一个类,读取patterrn.dateformat属性
@Data @Component @ConfigurationProperties(prefix = "pattern") public class PatternProperties{ private String dateformat; }
- 在UserController中使用这个类代替@Value
@Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Autowired private PatternProperties patternProperties; @GetMapping("/now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } }
-
3.配置共享
-
环境不同,都能读取到共享配置的属性值。
-
配置共享的优先级
- 添加一个环境共享配置,在nacos中添加一个user-service.yaml文件:
- 在user-service中读取共享配置,在user-service服务中,修改PatternProperties类,读取新添加的属性
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties{
private String dateformat;
private String enShareValue;
}
- 在user-service服务中,修改UserController,添加一个方法
@GetMapping("/porp")
public PatternProperties patternProperties(){
return patternProperties;
}
- 运行两个UserApplication,使用不同的环境,修改UserApplication2这个启动项,改变其profile值,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test
-
启动UserApplication和UserApplication2,
- 访问http://localhost:8081/user/porp
- 访问http://localhost:8082/user/porp