- 使用nacos作为springCloud配置中心,实现动态配置。
- 实现步骤
| <!--配置服务发现--> |
| <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: |
| |
| namespace: 8bd92052-fd57-4024-8110-2709d1866c73 |
| |
| |
| |
| |
| refresh-enabled: true |
| |
| |
| |
- 到这里配置中心的设置就完成了,只要保证服务和Nacos正常通信那就没问题了,后续只需要关注Nacos中的配置文件内容就可以了,这里贴一个我的Nacos配置文件截图:

- 动态配置属性值,举个例子:再某个Nacos配置文件application.yaml文件中我设置了属性“username”为张三,如下:
在我启动服务“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想要刷新,有以下几种方式
- Spring Boot应用包含Spring Boot Actuator依赖,并且启用了/actuator/refresh端点(这东西应该是默认启用的,老版本可能需要手动配置),您可以通过发送一个POST请求到这个端点来触发配置刷新
| curl -X POST http://your-service:port/actuator/refresh |
- 硬编码
| @Autowired |
| private RefreshScope refreshScope; |
| |
| public void refreshConfigurations() { |
| |
| refreshScope.refreshAll(); |
| |
| |
| } |
- 发布RefreshEvent事件,不推荐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探