SpringCloudAlibaba快速入门(2)基于Nacos构建分布式配置中心

写在前面的文章

  • SpringCloudAlibaba快速入门(1)基于Nacos实现服务注册与发现

快速入门

接下来通过一个简单的例子实现在 Nacos 中创建配置,在 SpringBoot 应用中加载 Nacos 配置并响应 Nacos 中的配置变化

创建配置

第一步:进入 Nacos 管理界面,选择 配置管理 \> 配置列表,点击右侧 + 号创建新配置
SpringCloudAlibaba快速入门(2)基于Nacos构建分布式配置中心_第1张图片

重要的配置项说明:

  • DataId:使用 {项目名}.{配置格式} 的格式,本次填入 nacos-config-client.properties
  • Group:分组名,默认为 DEFAULT_GROUP,本次操作使用默认值
  • 配置格式:默认为 properties,本次操作使用默认值,如果要使用其它格式则需要在应用中进行相应地配置
  • 配置内容:填入 couse.title=nacos

创建应用

第一步:创建一个 SpringBoot 应用,命名为 nacos-config-client,保持跟上面的 DataId 一致
第二步:添加依赖

添加父依赖

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.5.RELEASEversion>
    <relativePath/>
parent>

添加依赖管理器

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>Finchley.SR1version>
            <type>pomtype>
            <scope>importscope>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-alibaba-dependenciesartifactId>
            <version>0.2.2.RELEASEversion>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    dependency>
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <optional>trueoptional>
    dependency>
dependencies>

本例并没有添加对 Nacos 服务注册发现模块的依赖,配置功能跟服务注册发现功能是完全分立的,可以独立使用。

第三步:配置

配置服务名称及 Nacos 地址

server.port=8083
spring.application.name=nacos-config-client
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.application.name 配置成与 Nacos 中创建的 DataId 一致

第四步:创建启动类,并提供一个对外接口

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Slf4j
    @RestController
    @RefreshScope
    static class TestController {

        @Value("${couse.title}")
        private String title;

        @GetMapping("/test")
        public String hello() {
            return title;
        }
    }
}

接口实现很简单,就是输出配置文件中的 couse.title 的内容

  • @Value注解用于读取配置文件中的配置
  • @RefreshScope注解用于支持动态刷新配置内容,有了这个注解,在 Nacos 修改配置内容,@Value就会及时读取到最新的内容

第五步:启动应用
在启动日志最开始可以看到两行日志,说明已经成功从 Nacos 中加载配置,而且是在应用启动之前进行加载

Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}

验证配置获取

访问接口 http://localhost:8083/test,如果一切正常,则会输出 Nacos 中配置的 nacos

验证配置动态更新

在 Nacos 管理后台修改配置内容为 couse.title=nacos changed,再次访问接口,可以看到输出的结果也会相应改变。

查看日志,可以看到配置被重新加载

Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}
...
Refresh keys changed: [couse.title]

扩展

前面的例子要求 spring.application.name 配置成与 Nacos 中创建的 DataId 一致,只是为了采用默认配置,减少配置量。
通过自定义配置可以实现对任意名称的配置文件进行加载。

涉及配置项:

  • spring.cloud.nacos.config.prefix:配置文件前缀,如果没有配置,则默认使用 spring.application.name
  • spring.cloud.nacos.config.file-extension:配置文件后缀,默认为 properties
  • spring.cloud.nacos.config.group:配置文件分组,默认为 DEFAULT_GROUP

Nacos 采用 Group + DataId 进行配置文件定位,其中 DataId = {prefix}.{file-extension}

如下配置,则会加载 DEV_GROUP 分组下的 example.yaml 文件

spring.cloud.nacos.config.prefix=example
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.group=DEV_GROUP

你可能感兴趣的:(微服务,-,SpringCloud)