You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot Config Client配置刷新失效问题求助

看起来你遇到了Spring Cloud配置动态刷新失效(404错误)的问题,好在重启应用能加载新配置,说明客户端和配置中心的基础连接是正常的,咱们一步步来解决这个问题:

1. 先确认Actuator依赖是否到位

动态刷新配置的/refresh端点是Spring Boot Actuator提供的,你得确保项目里已经添加了这个依赖:

  • 如果用Maven,在pom.xml里加:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 如果用Gradle,在build.gradle里加:
implementation 'org.springframework.boot:spring-boot-starter-actuator'

2. 配置暴露Refresh端点

Actuator的端点默认是不对外暴露的,你需要在配置文件里明确开启refresh端点的web访问权限:

  • application.yml的话:
management:
  endpoints:
    web:
      exposure:
        include: refresh
  • application.properties的话:
management.endpoints.web.exposure.include=refresh

要是需要暴露多个端点,可以用逗号分隔,比如include=refresh,health

3. 修正刷新请求的路径

你当前调用的localhost:9001/refresh/有两个问题:

  • Actuator端点默认带有/actuator前缀,正确的路径应该是/actuator/refresh
  • 末尾的斜杠可能导致路径匹配失败,建议去掉
    所以正确的curl命令应该是:
curl -X POST http://localhost:9001/actuator/refresh

-X POST显式指定请求方法,避免环境默认方法不对的问题)

4. 确认@RefreshScope的使用没问题

你的控制器已经加上了@RefreshScope注解,这点是对的,不过再提醒下:这个注解一定要加在持有@Value变量的类上(你已经做到了),这样配置更新后,这个类的实例才会被重新创建,加载新的配置值。

额外排查小技巧

如果上面的步骤都试过还是404,再检查这两个点:

  • 有没有自定义server.servlet.context-path?如果有的话,访问路径要加上这个前缀,比如context-path是/myapp,那请求路径就是http://localhost:9001/myapp/actuator/refresh
  • 有没有用Spring Security之类的安全框架?如果有的话,需要配置允许匿名访问/actuator/refresh端点,不然会被拦截。

内容的提问来源于stack exchange,提问作者Neeush Sreenivas

火山引擎 最新活动