springcloud中使用nacos作为服务配置中心

前言

 在我的上一篇文章:springcloud中使用nacos作为服务注册中心 中已经成功的把 demo-nacos-client 服务注册进nacos中,本篇文章将会在 springcloud-demo 项目上进行编码,通过nacos来完成微服务的配置中心和实时刷新。

 最后在文章末尾会留下示例代码地址

启动nacos

 如何下载、如何安装请转移至springcloud中使用nacos作为服务注册中心文章。

 进入到nacos的bin目录中,双击下图文件启动

image.png

 浏览器访问 http://localhost:8848/nacos/index.html 进入管理页面(默认账户密码都是nacos)

image.png

创建demo-nacos-config服务

通过maven创建一个module服务

image.png

修改pom文件
<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

 这里相比较上一篇文章多出了一个maven坐标,也就是说下次我们在使用nacos时候,下面两个maven坐标都要添加上

 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
创建启动类

image.png

代码如下:

package com.springboot3.nacos.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationNacosConfig {

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

配置文件

 这里使用两个配置文件,分别是application.yml、bootstrap.yml。

 在这两个配置文件中,bootstrap.yml加载的优先级是高于application.yml的,所以我们把springboot启动所需要的配置信息配置到bootstrap.yml中。而对于application.yml可以配置自己需要的信息。

boostrap.yml文件
server:
  port: 8080

spring:
  application:
    name: demo-nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # nacos做为注册中心的地址
      config:
        server-addr: 127.0.0.1:8848 # nacos作为配置中心的地址
        file-extension: yaml # 指定yaml配置格式

application.yml文件
spring:
  profiles:
    active: dev # 表示开发环境
分析: ${prefix}-${spring.profiles.active}.${file-extension}

 当我们服务启动后会从nacos中加载指定的配置信息,具体怎么指定就需要一个公式。

${prefix}-${spring.profiles.active}.${file-extension}

  • $:默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • $: 即为当前环境,如果不存在对应的“ - ”也将不存在
  • file-extension:为配置的数据格式,目前只支持 properties 和 yaml 类型

所以该服务寻找的配置名字为 :demo-nacos-config-dev-yaml

在nacos中编写配置文件

点击添加按钮进行文件的编写

image.png

image.png

  • Data ID: 这里就是刚刚提到的公式,需要注意的是,这里必须是已.yaml结尾,如果写成yml会报错的。
  • 这里的配置内容是一个info信息,案例是获取nacos中配置的info信息

添加的列表显示

image.png

添加controller获取nacos中的info信息

image.png

代码如下:

package com.springboot3.nacos.config.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class DemoController {

    @Value("${config.info}")
    private String info;

    @GetMapping("/config/info")
    public String getInfo(){
        return info;
    }
}

  • @RefreshScope:该注解的功能为动态更新nacos中的配置信息

启动demo-nacos-config服务

在浏览器中访问 http://localhost:8080/config/info

结果图:

image.png

动态更新

修改nacos中的信息为:demo-nacos-config-2

由于我们在DemoController中添加了@RefreshScope注解,所以当nacos中对应的配置信息发生改变时可以实时刷新

修改后结果图:

image.png

结语

 nacos的强大不只这一点点,哪怕只是作为配置中心,其中的功能也有很多。由于能力有限,nacos的Group分组方案、Namespace空间方案只能以后补充了。

示例代码

https://gitee.com/cwljxf/springcloud-demo

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×