nacos安装教程:服务注册中心和配置中心nacos安装
一、组件版本关系
SpringCloudAlibaba、SpringCloud、SpringBoot对应版本
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2021.0.1.0 | Spring Cloud 2021.0.1 | 2.6.3 |
Nacos对应版本
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2021.0.1.0 | 1.8.3 | 1.4.2 | 4.9.2 | 2.7.15 | 1.4.2 |
官方提醒:每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本(经过验证,自行搭配各组件版本不保证可用)
更多版本对应关系参考:版本说明 Wiki
二、集成Nacos配置中心
1、SpringCloudAlibaba依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、启动配置管理
启动了 Nacos server 后,需要添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
3、两种配置方式bootstrap.yml、spring.config.import
3.1 配置 bootstrap.yml
SpringCloudAlibaba2021.0.1.0版本移除了对bootstrap.yml支持。看spring-cloud-starter-alibaba-nacos-config依赖关系中虽然引入了spring-cloud-starter-bootstrap,但是不会生效,必须重新引入bootstrap的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
bootstrap.yml
spring:
application:
name: provider-server
cloud:
nacos:
config:
file-extension: yml
group: PROVIDER_CONFIG_GROUP
name: provider-server-dev.yml
shared-configs: #配置共享文件
- data-id: application-common.yml
group: PROVIDER_CONFIG_GROUP
refresh: true
- data-id: application-custom.yml
group: PROVIDER_CONFIG_GROUP
refresh: false
Nacos配置中心文件
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
provider-server-dev.yml
application-custom.yml
application-common.yml
这个配置是共享文件,这里配置redis缓存
spring:
redis:
# Redis默认情况下有16个分片,这里配置具体使用的分片。默认是索引为0的分片
database: 1
# Redis服务器地址
host: 127.0.0.1
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password: 123456
# 连接超时时间(毫秒)
timeout: 2000s
# 配置文件中添加 lettuce.pool 相关配置,则会使用到lettuce连接池
lettuce:
pool:
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: 60s
# 连接池中的最大空闲连接 默认 8
max-idle: 10
# 连接池中的最小空闲连接 默认 0
min-idle: 10
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-activ: 8
3.2 spring.config.import方式
使用这个方法时,不需要bootstrap.yml。如果引用了 spring-cloud-starter-bootstrap需要去除
创建application.yml
server:
port: 8090
spring:
application:
name: provider-server
cloud:
nacos:
discovery:
group: PROVIDER_GROUP
config:
group: PROVIDER_CONFIG_GROUP
server-addr: 127.0.0.1:8848
config:
import:
- optional:nacos:provider-server-dev.yml # 监听 PROVIDER_GROUP :provider-config-dev.yml
# - optional:nacos:provider-server-dev.yml?group=group_01 # 覆盖默认 group,监听 group_01:provider-config-dev.yml
# - optional:nacos:provider-server-dev.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
- nacos:provider-server-dev.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败
4、通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新
读取配置文件有两种方式:
1、直接通过@Value注解
2、通过实体类注入
UserConfig.java
其中prefix = "configdata"是application-custom.yml配置文件内容的前缀
@Data
@Configuration
@ConfigurationProperties(prefix = "configdata")
public class UserConfig {
private String name;
private Integer age;
private String id;
}
@RefreshScope
@RestController
@RequestMapping("/provider")
public class ProviderController {
@Autowired
private UserConfig userConfig;
@Autowired
private StringRedisTemplate redisTemplate;
@Value("${server.port}")
private String port;
@GetMapping("/getNacosConfig")
public String providerTest() {
return "我是provider,已成功获取nacos配置中心的数据:(name:" + userConfig.getName() +",age:"+userConfig.getAge()+",id:"+userConfig.getId()+")";
}
@GetMapping("/addRedis")
public void addRedisValue(){
redisTemplate.opsForValue().set("zhangsan","23");
}
@GetMapping("/getPort")
public String getPort() {
return "我是provider,已成功获取nacos配置中心的数据:(端口号:" +port +")";
}
}
5、演示
1、@Value注解
2、实体类
修改配置并且发布
验证动态刷新完成