众所周知,使用Nacos配置中心时,将@RefreshScope放到Bean的类定义上就能实现自动刷新。也就是:@Value注解的值可以在Nacos修改配置后自动更新,不用重启服务。
不加@RefreshScope不影响使用,只是无法在不重启的情况下更新@Value的值,这就会导致很多人都忘记加这个注解了。
但是,每个有@Value的类都要加这个注解?是不是太累了?
低端方案:开发组长定时检查一下代码,看谁的没有加这个注解。(这实在是太low了)
高端方案:项目启动时,自动将带有@Value注解的类添加@RefreshScope的功能。
本文采用高端方案,一劳永逸!所有带有@Value注解的地方都会自动刷新,无需添加@RefreshScope。
注意
本组件提供了一种用BeanFactoryPostProcessor修改bean的实践。
以动态刷新而言,不建议使用修改scope为refresh这种方式,因为会有很多失效场景。建议使用此方法:手写组件动态更新@Value的值 – 自学精灵
结果展示
Controller代码
package com.knife.example.business.product.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Api(tags = "商品") @RestController @RequestMapping("product") public class ProductController { @Value("${key1:aa}") private String key1; @ApiOperation("测试") @GetMapping("detail") public String detail() { return key1; } }
测试
访问:http://localhost:8080/doc.html
修改Nacos,将key1改为bb,不重启应用。
再次请求:(可见,已经自动更新啦)
代码
此内容查看价格为0.9积分,VIP免费,请先登录
请先
!