INDEX
- §1 依赖
- §2 配置
- §3 静态、动态引用
- §3.1 `@Value` 静态引用
- §3.2 `@Value` 动态引用
- §3.3 `@ConfigurationProperties` 动态引用
- §4 多配置文件
§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-sccloud:nacos:config:### nacos url 和用户名密码配置,必须server-addr: 192.168.32.3:8848username: nacospassword: nacos### 必配### cloud下,data-id 通过下面的配置自动识别,可以省略### ${prefix}-${spring.profiles.active}.${file-extension}### group 可以省略,默认使用 DEFAULT_GROUPnamespace: sdbcfile-extension: yml### 也可以作为 data-id 的 prifix### 优先级高于 spring.application.name, 但依然不建议省略#prefix: sdbc-nacos-scc
springcloud 给 nacos 规定了较充足的默认值
- namespace : public
- group : DEFAULT_GROUP
- data-id : ${spring.application.name}
- 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 {@Beanpublic 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.ymlgroup: DEFAULT_GROUPrefresh: true### extension-configs 的缺省规则同 spring.cloud.nacos.config.*- data-id: sdbc-nacos-sc-white.yml