Live2D

springCloud融合nacos配置中心

  1. 使用nacos作为springCloud配置中心,实现动态配置。
  2. 实现步骤
  • 导入maven
<!--配置服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置动态刷新支持@refreshscop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--配置中心的核心依赖,有了这个东西,去application.yml文件中配置一下nacos的地址等信息就能完成配置中心实现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 配置application.yml(springCloud版本在2.4之后)/bootstrap.yml(springClou版本在2.4之前)具体内容如下:
server:
port: 1
spring:
application:
name: 1
cloud:
nacos:
config: #这里是配置中心的设置
#server-addr: 127.0.0.1:8888 #nacos地址,统一配置
namespace: 8bd92052-fd57-4024-8110-2709d1866c73 # nacos配置文件的命名空间ID
#data-id: # 数据ID,用于配置分组和文件后缀之前的唯一标识
#group: PRODUCTION # 分组,默认是 DEFAULT_GROUP
#prefix: ${spring.application.name} # 前缀,默认为${spring.application.name}
#file-extension: yaml # 文件后缀名,默认为 yaml
refresh-enabled: true # 是否支持动态刷新
#discovery: #这里是注册中心配置
#server-addr: 127.0.0.1:8848 #nacos地址,统一配置
#namespace: public # 命名空间ID
  • 到这里配置中心的设置就完成了,只要保证服务和Nacos正常通信那就没问题了,后续只需要关注Nacos中的配置文件内容就可以了,这里贴一个我的Nacos配置文件截图:
    image
  1. 动态配置属性值,举个例子:再某个Nacos配置文件application.yaml文件中我设置了属性“username”为张三,如下:
username: 张三 #启动服务后将Value改为“李四”

在我启动服务“practice”后,更改username的值为“李四”
然后我在某个controller中使用@Value调用它,如下:

@RestController
@RequestMapping("/user")
public class UserController() {
@Value"${username}"
private String username;
@GetMapping
public String getUsername() {
return username;
}
}

此时调用“localhost:8080/user"发现得到的结果还是“张三”,嗯?没起作用是怎么回事呢!查阅资料中...,哎,最后发现,对于配置文件配置的属性值,想要实现Nacos动态配置,需要在类作用于加上注解:@RefreshScope,代码如下:

@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController() {
@Value"${username}"
private String username;
@GetMapping
public String getUsername() {
return username;
}
}

加上注解后,我修改username=“王五”,访问接口,得到的返回信息依旧是“张三”,嗯?又没起作用!
通过查资料发现,配置@RefreshScop的Bean想要刷新,有以下几种方式

  1. Spring Boot应用包含Spring Boot Actuator依赖,并且启用了/actuator/refresh端点(这东西应该是默认启用的,老版本可能需要手动配置),您可以通过发送一个POST请求到这个端点来触发配置刷新
curl -X POST http://your-service:port/actuator/refresh
  1. 硬编码
@Autowired
private RefreshScope refreshScope;
public void refreshConfigurations() {
// 刷新所有在@RefreshScope下的bean
refreshScope.refreshAll();
// 或者,如果你只想刷新特定的bean,可以这样做(但通常不推荐,因为它依赖于内部实现)
// refreshScope.refresh("yourBeanName");
}
  1. 发布RefreshEvent事件,不推荐
posted @   六爻呈乾  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示