微服务架构 | 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

浙公网安备 33010602011771号