Java SpringCloud Nacos

1、配置对应的dataId的refresh为True,并且使用@RefreshScope注解进行刷新

配置

  1. spring:
  2. cloud:
  3. nacos:
  4. username: nacos
  5. password: nacos
  6. config:
  7. server-addr: 127.0.0.1:8848
  8. namespace: public
  9. file-extension: yml
  10. refresh-enabled: true
  11. shared-configs:
  12. - dataId: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  13. refresh: true
  14. - dataId: common.${spring.cloud.nacos.config.file-extension}
  15. refresh: true
  1. info:
  2. name: 123456
  3. age: 18
  4. fcant:
  5. name: fc
  6. age: 18

使用

  1. import lombok.Data;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.stereotype.Component;
  5. /**
  6. * ConfigValue
  7. * <p>
  8. * encoding:UTF-8
  9. *
  10. * @author Fcant 下午 16:47 2021/11/10/0010
  11. */
  12. @Data
  13. @Component
  14. @ConfigurationProperties(prefix = "fcant")
  15. public class ConfigValue {
  16. @Value("${fcant.name}")
  17. private String name;
  18. @Value("${fcant.age}")
  19. private String age;
  20. }
  1. @RestController
  2. @RequestMapping("/version")
  3. @RefreshScope
  4. public class VersionController {
  5. @Autowired
  6. ConfigValue configValue;
  7. @Value("${info.name}")
  8. private String name;
  9. @GetMapping("/name")
  10. public String getName() {
  11. return name + configValue.toString();
  12. }
  13. }

结果

  1. 前:123456ConfigValue(name=fc, age=18)
  2. 后:wdConfigValue(name=fc, age=19)

结论

配置对应的dataId的refresh为True,并且使用@RefreshScope注解,对应的配置值和配置类的值及时的刷新了。

2、配置对应的dataId的refresh为True,但不使用@RefreshScope注解进行刷新

配置中心修改前的值

  1. info:
  2. name: wd
  3. age: 18
  4. fcant:
  5. name: fc
  6. age: 17

配置中心修改后的值

image.png

结果

image.png

  1. 前:wdConfigValue(name=fc, age=19)
  2. 后:wdConfigValue(name=fc name, age=17)

结论

不使用@RefreshScope注解,不能刷新@Value注解引用的值,但是配置类的值被更新了。

3、配置对应的dataId的refresh为False,使用@RefreshScope注解进行刷新

修改前的配置文件

  1. info:
  2. name: wd name
  3. age: 18
  4. fcant:
  5. name: fc name
  6. age: 17

返回值

  1. wd nameConfigValue(name=fc name, age=17)

修改后的配置文件

  1. info:
  2. name: wd hello
  3. age: 18
  4. fcant:
  5. name: fc hello
  6. age: 11

返回值

  1. wd nameConfigValue(name=fc name, age=17)

结论

不设置dataId的refresh属性为True,仅使用@RefreshScope注解无法拿到最新值。

实验表格

dataId的refresh属性值 是否使用@RefreshScope注解 配置类是否更新 @Value注解的值是否更新
True✅
True✅
False❌

结论

  • 当dataId的refresh属性值为True时,会自动更新配置类的值。
  • 当dataId的refresh属性值为True时,使用@Value注解引用的值必须使用@RefreshScope注解才会自动更新。
  • 当dataId的refresh属性值为False时,任何值都不会刷新。