Nacos配置中心

目录

Nacos配置管理

nacos配置中心

1.全局统一管理配置项

2.加载配置源

3.拆解nacos配置中心

nacoas配置原理

nacos配置文件优先级

nacos配置热更新

方式一: 用 @value 读取配置时,搭配 @RefreshScope

方式二: 直接用 @ConfigurationProperties 读取配置



Nacos配置管理

spring的配置文件优先级:bootstrap > application , properties > yml。需要注意的是相同的配置项会被覆盖。

项目里的配置文件根据环境分为:local、dev、test、prod。

# 设置配置文件的运行环境
spring.profiles.active=dev

需要注意的是:通用的基础配置写在application.yml。例如:

差异化的配置写在对应的环境配置文件里:

nacos配置中心
1.全局统一管理配置项

实际的业务开发中,多处使用到的变量会以配置项的形式进行全局统一管理。

借口需要读取user的name和age,通过注解@Value获取配置文件中的值,但是配置文件并没有匹配,会报错:

在对应配置文件中添加上就ok了

2.加载配置源

在上面的场景中,如果变更了user的name或者age,我们需要更新配置文件,重新编译打包发布。这样效率比较低,而nacos作为配置中心是支持热更新的。运行项目时,可以发现有加载一个默认配置项的日志:

Located property source: [BootstrapPropertySource {name='bootstrapProperties-mall-product-dev.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-mall-product.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-mall-product,DEFAULT_GROUP'}]

3.拆解nacos配置中心
nacoas配置原理

一般地,我们使用获取配置的流程如下:

而nacos的配置需要优先本地获取,这里就使用了bootstrap优先级高于application的操作

所以,项目中优先级较高的配置都会写在bootstrap配置文件中,这就是日志中的BootstrapPropertySource。

一般地,我们会配置nacos的相关信息在bootstrap配置文件里。

nacos配置文件优先级

上面的Located property source日志里枚举了三个配置文件,本地运行项目指定了dev环境。验证发现:

  • nacos没有任何配置文件:

    配置项读取本地,优先级bootstrap>application,properties>yml,但是相同属性存在先加载的被后加载覆盖的现象

  • nacos存在配置文件:

    日志中的name对应的是nacos配置中心的dataId.他们的先后顺序就是优先级。

    mall-product-dev.properties > mall-product.properties > mall-product(需要注意的是没有后缀的配置文件类型如果是yml,那么是读取不到配置项的,所以养成良好的习惯:配置文件加上文件类型后缀)

nacos配置热更新

热更新最终的目的,是修改 nacos 中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

有两种方式:

方式一:@value 读取配置时,搭配 @RefreshScope

@Value 注入的变量所在类上添加注解 @RefreshScope

方式二: 直接用 @ConfigurationProperties 读取配置

可以新建一个类专门用来完成配置加载

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateFormat;
}
public class UserController {

    @Autowired
    private UserService userService;
    @Autowired
    private PatternProperties patternProperties;

//    @Value("${pattern.dateformat}") //Value注解 可以读取配置
//    private String dateformat;

    @GetMapping("now")
    public  String  now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateFormat()));
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elaine202391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值