五、SpringCloud alibaba 之 nacos配置中心
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
在创建配置文件时,要填写dataId

在 Nacos Spring Cloud 中,dataId
${prefix}-${spring.profiles.active}.${file-extension}- 
prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
- 
spring.profiles.active即为当前环境对应的 profile,详情可以参考 。 注意:当spring.profiles.active为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
- 
file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。
通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。
创建的配置文件内容如下:

入门示例
在5.1中 在nacos的服务端配置好文件之后,需要在客户端读取配置文件的内容。首先在application.propertis或者application.yml中连接nacos的服务端。
server.port=8083
#配置的dataId的prefix, 默认读取的是spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来配置
spring.application.name=test
# nacos服务端地址
spring.cloud.nacos.server-addr=localhost:8848创建一个配置类
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
    private String name;
    private String password;
}创建一个controller类
@RequestMapping("/user")
@RestController
public class UserController {
    @Value("${user.name}")
    private String userName;
    @Autowired
    private UserProperties userProperties;
    @RequestMapping("/getUserName")
    public String getUserName(){
         System.out.println(userProperties);
        System.out.println(userName);
         return "success";
    }
}运行结果

user.name
我们可以看到通过UserProperties配置类接收的配置信息更新了,但是在UserController类中通过@Value
如果想要UserController类中通过@Value接收的配置信息也实时更新,需要在类是添加@RefreshScope注解,因此我们建议nacos配置类的配置信息尽量采取配置类和@ConfigurationProperties结合的方式来接收。
共享配置
因此该配置必须放在 bootstrap.properties 文件中才会生效,放在application配置文件中是不生效的。关于这部分详细的设计可参考 。 一个完整的配置案例如下所示
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=test1
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=test2
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=test3
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true可以看到:
- 
通过 spring.cloud.nacos.config.extension-configs[n].data-id的配置方式来支持多个 Data Id 的配置。
- 
通过 spring.cloud.nacos.config.extension-configs[n].group的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
- 
通过 spring.cloud.nacos.config.extension-configs[n].refresh的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.group=DEVELOP_GROUP该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。
我们要在微服务拉取共享配置。将拉取到的共享配置与本地的application.yaml配置合并,完成项目上下文的初始化。
不过,需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml。
也就是说引导阶段,application.yaml文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?
SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了。




 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号