专业的编程技术博客社区

网站首页 > 博客文章 正文

(二)SpringCloudAlibaba入门-配置中心

baijin 2024-08-29 12:28:09 博客文章 4 ℃ 0 评论

章节目标

基于前一章节:(一)SpringCloudAlibaba入门-注册中心

对项目demo-provider-service新增引入配置中心。

功能:

  • 配置中心负责远程管理配置信息
  • 配置中心属性热更新

配置中心作用

负责统一管理应用配置信息,以及配置信息的热更新。

环境准备

配置中心:nacos

jdk版本:jdk17

Spring Cloud Alibaba版本组合:

  • Spring Boot 3.0.10
  • Spring Cloud 2022.0.4
  • Spring Cloud Alibaba 2022.0.0.0

步骤一:引入依赖

        <!-- nacos配置中心依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!-- nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

步骤二:新增bootstrap.yml配置

bootstrap优先于application加载。所以从bootstrap.yml内指定配置中心相关信息。

bootstrap.yml

spring:
  application:
    name: provider-service
  cloud:
    nacos:
      config:
        enabled: true
        username: nacos
        password: nacos
        server-addr: 127.0.0.1:8848
        file-extension: yaml

注意:配置中心需要加载的文件命名(data-id)规则为

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

如果${spring.profiles.active}未指定,则data-id省略-,即

${spring.application.name}.${spring.cloud.nacos.config.file-extension}

其中spring.cloud.nacos.config.file-extension默认为properties。

步骤三:创建远程配置信息

登录nacos,创建配置信息,data-id名称为provider-service.yaml,类型为yaml。


验证结果

应用中删除application.yml,仅保留bootstrap.yml

启动provider-service服务,观察启动的结果以及nacos中配置信息的监听查询。

拓展:配置优先级问题

首先根据默认Spring Cloud规则而言远程配置优先于本地配置,此规则可以根据配置属性进行参数调整改变此策略。

其次远程配置优先级又遵循application-[profile]优先于application(此规则与SpringBoot配置文件优先级相同)。

拓展:如何使本地配置优先于远程配置

# 默认为false,设置为true:则是将配置中心优先级降为最低,即远程配置允许被本地配置所覆盖。
spring.cloud.config.override-none=true

注意:此属性必须配置于配置中心,而不是项目文件。

拓展:配置自动刷新

使用nacos作为配置中心可以使下面的情景下属性自动刷新:

说明:自动刷新即为热更新属性。在不重启服务的情况下,自动检测到属性变化并刷新值。

  • @Value+@RefreshScope
  • @ConfigurationProperties

场景:@Value+@RefereshScope

@RefreshScope
public class PropertiesController {
    @Value("${refreshScopeVal}")
    private String refreshScopeVal;
}

场景:@ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "dynamic-props")
public class DynamicPropsBean {

    private String val1;
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表