一、#创作灵感#
Nacos在公司项目中运用越来越多,固写下此笔记以巩固知识要点
二、环境
- SpringBoot 2.7.18 官方地址:SpringBoot 2.7.18
- SpringCloud 2021.0.9 官方地址:SpringCloud 2021.0.9
- SpringCloud Alibaba 2021.0.6.1 官方地址:SpringCloud Alibaba 2021.0.6.1
- Nacos 2.4.3 官方下载地址:Nacos 2.4.3
- Oracle JDK8u202(Oracle JDK8最后一个非商业版本) 下载地址:Oracle JDK8u202
三、SpringCloud Alibaba版本说明
由于作者所在公司软件安全比较严苛,所以没有完全按照版本关系来。但功能都测试通过,所有组件算集成成功。当然之个过程也费了一些精力。
SpringCloud Alibaba不是本文的重点,SpringCloud Alibaba本身包含一套SpringCloud 与Nacos,本文主要讲SpringCloud 与Nacos的集成。
因专业人员都会考虑这一点,所以这里简单说明一下
四、Nacos安装及验证
熟悉Nacos安装的可跳过该章节
1、下载
见前面的环境章节
2、安装
略。解压即可
3、配置
server.port=8848
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user.0=root
db.password.0=Dzd*****
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos2****
# 自定义的Base64编码字符串,确保长度至少32字符且各Nacos节点配置一致。可以使用在线工具生成,例如此网站,并确保不使用默认值。
nacos.core.auth.plugin.nacos.token.secret.key=bmFjb3MuY29yZS5hdXRoLnBsdWdpbi5uYWNvcy50b2tlbi5zZWNyZXQua2V5LnNtZXQ=
nacos.core.auth.plugin.nacos.token.secret.key 说明
4、启动
#Linux/Unix/Mac
#启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
#如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
#Windows
#启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
5、登陆/验证是否安装成功

五、Nacos 融合 Spring Cloud,成为注册配置中心
高手一般直接看官网就够
Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos 官网
觉得官网不够的读者我们往下看
1、添加pom依赖
<-- 如果要作为配置中心就添加 --->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.6.1</version>
</dependency>
<-- 如果要作为注册中心就添加 --->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.6.1</version>
</dependency>
2、bootstrap.properties配置
这里涉及4个JVM启动参数:
-Dprofile=dev
-Dnacos-addr=10.130.***.**:18848
-Dnacos-password=nacos2024****
-Dgroup=A
logging.config=classpath:logback-spring.xml
spring.application.name=***-rpc-service
# Nacos地址
spring.cloud.nacos.config.server-addr=${nacos-addr}
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=${nacos-password}
spring.cloud.nacos.config.contextPath=/nacos
# 服务配置
# 主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)
# extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0]
# shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]
spring.cloud.nacos.config.import-check.enabled=true
spring.cloud.nacos.config.namespace=***-rpc-service
spring.cloud.nacos.config.group=${group}
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.file-extension=properties
### 将 DataID 设置到 nacos: 协议后面, 如果是默认分组则不用配置import
spring.config.import=nacos:smet-basic,nnacos:smet-datasource,nacos:smet-mq,nacos:smet-management,nacos:smet-prometheus,nacos:smet-elasticsearch,nacos:smet-sw-ui,nacos:smet-job,nacos:smet-****....
# 服务注册
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=${nacos-password}
spring.cloud.nacos.discovery.namespace=***-rpc-service
spring.cloud.nacos.discovery.group=${group}
spring.cloud.nacos.discovery.server-addr=${nacos-addr}
3、application.properties配置
spring.profiles.active=${profile}
spring.cloud.nacos.config.extension-configs[10].data-id=****
spring.cloud.nacos.config.extension-configs[10].group=smet-rpc-service
# 自动刷新配置
spring.cloud.nacos.config.extension-configs[10].refresh=true
spring.cloud.nacos.config.extension-configs[9].data-id=smet-dubbo
spring.cloud.nacos.config.extension-configs[9].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[9].refresh=true
spring.cloud.nacos.config.extension-configs[8].data-id=smet-basic
spring.cloud.nacos.config.extension-configs[8].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[8].refresh=true
# 数据源
spring.cloud.nacos.config.extension-configs[7].data-id=smet-datasource
spring.cloud.nacos.config.extension-configs[7].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[7].refresh=true
# 消息队列
spring.cloud.nacos.config.extension-configs[6].data-id=smet-mq
spring.cloud.nacos.config.extension-configs[6].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[6].refresh=true
# 应用管理
spring.cloud.nacos.config.extension-configs[5].data-id=smet-management
spring.cloud.nacos.config.extension-configs[5].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[5].refresh=true
# 普米
spring.cloud.nacos.config.extension-configs[4].data-id=smet-prometheus
spring.cloud.nacos.config.extension-configs[4].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[4].refresh=true
# es
spring.cloud.nacos.config.extension-configs[3].data-id=smet-elasticsearch
spring.cloud.nacos.config.extension-configs[3].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[3].refresh=true
# skywalking-ui
spring.cloud.nacos.config.extension-configs[2].data-id=smet-sw-ui
spring.cloud.nacos.config.extension-configs[2].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[2].refresh=true
# 外围接口
spring.cloud.nacos.config.extension-configs[1].data-id=smet-***
spring.cloud.nacos.config.extension-configs[1].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[1].refresh=true
# 定时任务
spring.cloud.nacos.config.extension-configs[0].data-id=smet-job
spring.cloud.nacos.config.extension-configs[0].group=smet-rpc-service
spring.cloud.nacos.config.extension-configs[0].refresh=true
4、添加命名空间

5、添加配置

总结
1、应用主启动没有增加额外的注解
2、新版本的Nacos整合非常简单
附件一:实现Nacos属性值自动刷新的三种方式
实现Nacos属性值自动刷新的三种方式
在Spring Boot项目中,我们经常使用Nacos作为配置中心,用于管理应用程序的属性配置。当我们在Nacos上修改属性值时,希望应用程序能够自动刷新并应用最新的属性值,以避免重启应用。本篇博客将介绍三种实现Nacos属性值自动刷新的方式,并提供相应的示例代码。
方式一:使用@RefreshScope注解
@RefreshScope注解是Spring Cloud提供的一种属性刷新机制。它可以应用于需要动态刷新的类或方法上,当Nacos上的属性值发生变化时,通过调用/actuator/refresh端点来刷新被注解的类或方法。
步骤:
在Spring Boot项目的pom.xml文件中添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在需要动态刷新的类或方法上添加@RefreshScope注解:
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class MyComponent {
// ...
}
示例代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class MyController {
@Value("${my.property}")
private String myProperty;
@GetMapping("/property")
public String getProperty() {
return myProperty;
}
}
在上述示例中,当Nacos上的my.property属性值发生变化时,调用/actuator/refresh接口即可刷新MyController中的myProperty属性。
方式二:使用@NacosValue注解
@NacosValue注解是Nacos提供的一种属性刷新机制。它可以直接应用于类的属性上,当Nacos上的属性值发生变化时,自动刷新注解的属性。
步骤:
在Spring Boot项目的pom.xml文件中添加依赖(已添加则跳过):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在需要动态刷新的属性上添加@NacosValue注解:
import com.alibaba.nacos.api.config.annotation.NacosValue;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
@NacosValue(value = "${my.property}", autoRefreshed = true)
private String myProperty;
// ...
}
示例代码
import com.alibaba.nacos.api.config.annotation.NacosValue;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
@NacosValue(value = "${my.property}", autoRefreshed = true)
private String myProperty;
public String getProperty() {
return myProperty;
}
}
在上述示例中,当Nacos上的my.property属性
值发生变化时,自动刷新myProperty属性。
方式三:使用Spring Cloud Bus
Spring Cloud Bus是一个事件、消息传输总线,可以将配置刷新事件广播给多个应用程序实例。通过结合Nacos和Spring Cloud Bus,可以实现多个应用程序实例之间的属性刷新。
步骤:
在Spring Boot项目的pom.xml文件中添加依赖(已添加则跳过):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
配置RabbitMQ或Kafka作为消息中间件
-
在应用程序的配置文件中添加Spring Cloud Bus的配置:
spring:
cloud:
bus:
enabled: true
refresh:
endpoints: /refresh
示例代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class MyController {
@Value("${my.property}")
private String myProperty;
@GetMapping("/property")
public String getProperty() {
return myProperty;
}
}
在上述示例中,当Nacos上的my.property属性值发生变化时,通过发送POST请求到/actuator/bus-refresh接口即可刷新所有应用程序实例中的属性。


1万+





