微服务架构 | nacos - [标准化接入: springcloud]

@

§1 依赖

父 pom

有了 spring-cloud-alibaba-dependencies 不用 spring-cloud-dependencies
官网上 import 了两个 pom,实测没必要

<!-- 指定父容器 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.7.RELEASE</version>
</parent>

<!-- 加入版本管理 -->
<properties>
    <spring.cloud.version>2.2.9.RELEASE</spring.cloud.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子 pom

<!--实装引入-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

§2 配置

### 强烈建议:spring 系的项目,都显示的定义 spring.application.name
### 尤其是 spring cloud 项目
spring:
  application:
    name: sdbc-nacos-sc
  cloud:
    nacos:
      config:
        ### nacos url 和用户名密码配置,必须
        server-addr: 192.168.32.3:8848
        username: nacos
        password: nacos
        ### 必配
        ### cloud下,data-id 通过下面的配置自动识别,可以省略
        ### ${prefix}-${spring.profiles.active}.${file-extension}
        ### group 可以省略,默认使用 DEFAULT_GROUP
        namespace: sdbc
        file-extension: yml
        ### 也可以作为 data-id 的 prifix
        ### 优先级高于 spring.application.name, 但依然不建议省略
        #prefix: sdbc-nacos-scc

springcloud 给 nacos 规定了较充足的默认值

  • namespace : public
  • group : DEFAULT_GROUP
  • data-id : $
  • file-extension : properties

在不使用默认值的情况下(比如配置不在 public 空间),缺少 namespace、file-extension 或配置不正确时,可能报如下异常

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sdbc.nacos.sc.a' in value "${sdbc.nacos.sc.a}"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]

§3 静态、动态引用

§3.1 @Value 静态引用

@Value("${sdbc.nacos.sb.a}")
private String a;

§3.2 @Value 动态引用

需要如下配置,但是 NacosConfigProperties 中此配置默认开启

spring.cloud.nacos.config.refresh-enabled=true

直接在引用的类上增加 @RefreshScope 即可

@NacosValue(value = "${sdbc.nacos.sb.b}", autoRefreshed = true)
private String b;

§3.3 @ConfigurationProperties 动态引用

springcloud 下 @ConfigurationProperties 自动支持动态引用
@ConfigurationProperties只是声明了模块化引用,还需要使模块化引用被spring扫描否则是不生效的
声明方式

@ConfigurationProperties(prefix = "sdbc.nacos.sc.l")
public class ModulizedConfig {
    private String x;
    private String y;
}

扫描方式
方式1:直接在声明处增加 @Component
方式2:使用 @Bean 的方式扫描

@Configuration
public class ModulizedActiveConfig {
    @Bean
    public ModulizedConfig modulizedConfig() {
        return new ModulizedConfig();
    }
}

方式3:使用 @EnableConfigurationProperties 扫描

@Configuration
@EnableConfigurationProperties(ModulizedConfig.class)
public class ModulizedActiveConfig {
}

当模块化配置没有被正确的扫描时,会按找不到 bean 报错

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'x.ModulizedConfig' that could not be found.

§4 多配置文件

参考 基本配置,增加 extension-configs

spring:
  cloud:
    nacos:
      config:
        extension-configs:
          - data-id: sdbc-nacos-sc-biz.yml
            group: DEFAULT_GROUP
            refresh: true
            ### extension-configs 的缺省规则同 spring.cloud.nacos.config.*
          - data-id: sdbc-nacos-sc-white.yml
posted @ 2025-05-21 11:08  问仙长何方蓬莱  阅读(15)  评论(0)    收藏  举报