所有分类
  • 所有分类
  • 未分类

自动启用@RefreshScope功能

众所周知,使用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免费,请先

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录