Nacos-多环境配置共享
微服务启动时会从nacos读取多个配置文件:
[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml 【nacos中定义的配置文件:服务名-环境.后缀名】
[spring.application.name].yaml,例如:userservice.yaml 【服务名.后缀名】与环境无关
无论profile如何变化,[spring.application.name].yaml这个文件【即userservice.yaml】一定会加载,因此多环境共享配置可以写入这个文件
1、在nacos控制台新建userservice.yaml配置文件
2、
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; private String envSharedValue; }
package cn.itcast.user.web; import cn.itcast.user.config.PatternProperties; 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.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") //@RefreshScope public class UserController { @Autowired private UserService userService; // @Value("${pattern.dateformat}") // private String dateformate; @Autowired private PatternProperties patternProperties; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } @GetMapping("prop") public PatternProperties properties(){ return patternProperties; } /** * 路径: /user/110 * * @param id 用户id * @return 用户 */ @GetMapping("/{id}") public User queryById(@PathVariable("id") Long id) { System.out.println(id); return userService.queryById(id); } }
多种配置的优先级:
服务名-profile.yaml > 服务名称.yaml > 本地配置
nacos中的配置 > 本地配置
nacos:当前环境配置 > 多环境共享配置
微服务会从nacos读取的配置文件:
[服务名]-[spring.profile.active].yaml,环境配置
[服务名].yaml,默认配置,多环境共享
优先级:
[服务名]-[环境].yaml >[服务名].yaml > 本地配置