玖叶教程网

前端编程开发入门

Nacos配置中心的使用(nacos 配置管理)


Nacos除了作为注册中心外是配置中心,配置中心的功能主要是将一些公共配置项配置与配置中心,这样每个微服务都会从配置中心统一读取,便于后面维护,同时也支持热更新,即某个配置项的值在服务启动后,再在配置中心修改,服务也是可以实时感知更新,不过热更新需要开启,否则不支持。(具体看下面)

使用配置中心的相关环境

Nacos注册中心启动,手动增加需要的配置项

1.点击下图加号

2.点击加号看到下面新建配置


DataId:表示新增配置名称,用来我们微服务读取指定配置文件

Group:表示配置项所属组,微服务读取也会取值这个来确认读取指定配置 文件

描述:给配置文件的备注

归属引用:其实就是标志是哪个服务配置的,这个根据需求,不是必填

标签:同理

配置格式:TEXT,JSON,,XML,YAML,HTML,Properties这几种,我们使用

Properties示例


3.填好相关内容,点击发布,就创建好了配置


到此配置项已经配置好了,可以点击详情查看,也可以继续编辑添加。

Nacos准备工作做好,接下来就是微服务的创建加读取了。

建一个服务config-xg: 配置实例服务



pom的jar包引用配置:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
    </properties>


    <dependencies>
        <!-- springboot 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 把服务注册到注册中心的依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>

        <!-- 配置中心依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>
    </dependencies>

bootstrap.properties:nacos配置中心相关配置需要放在bootstrap.properties中,否则会报无法解析相关配置字符错误,因为在线参数实时配置需要更高的初始化优先级,而bootstrap.properties高于application.properties被优先解析加载。

#开关控制默认加载哪个配置文件  区分开发与测试环境配置
spring.profile.active=dev
#nacos注册中心ip+端口号,此配置就是把我们的服务注册到指定的nacos注册中心
spring.cloud.nacos.discovery.server-addr=10.45.12.63:8848
#命名空间,读取的配置管理所属,对应nacos的命名空间,绑定了配置项
spring.cloud.nacos.discovery.namespace=public
#读取配置中心配置文件类型有xml,yml,json,properties等
spring.cloud.nacos.config.file-extension=properties
#配置中心Data Id的开始关键字
spring.cloud.nacos.config.prefix=dev-common
#配置文件组
spring.cloud.nacos.config.group=DEFAULT_GROUP
# nacos配置中心是否生效
spring.cloud.nacos.config.enabled=true

application-dev.properties:

#端口号
server.port=8082
#服务名称
spring.application.name=config-xg

#读取配置中心的配置项, $加大括号,中间匹配配置项名称就可以读取到了
redis.host=${redis.host}

读取配置项具体代码使用 ConfigController:

使用@Value的配置需要在当前的类上面加上@RefreshScope注解,就可以支持热更新了,只需要在nacos配置中心修改了值,服务那边也会跟着进行刷新。

package com.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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author xg
 */
@RestController
@RequestMapping("/config")
//  该注解配合@value支持配置项热更新加载
@RefreshScope
public class ConfigController {

   // 改注解可以读取配置项的值
    @Value("${redis.host}")
    String redisHost;

    @GetMapping(value= "/get")
    public String get(){
        return "redisHost is " + redisHost;
    }
}

ConfigApplication启动类:

package com.config;

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

/**
 * @author xg
 * @ClassName: ConfigApplication
 * @Description: 启动入口
 */
// @EnableDiscoveryClient:服务发现的注解
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigApplication {

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

启动服务注册到nacos:




现在的redis.host值是127.0.9.8,我们请求接口看看返回一不一致:


我们看到是一致的,我们再修改nacos注册中心配置的配置项的值,再请求是否动态刷新。

先修改ncaos配置中心:

1.先点击编辑


2.修改


3.发布,在查看详情


4.再次访问接口


与修改后的值一致,动态刷新成功。

读取配置还有其他注解和上下文获取方式,比如@ConfigurationProperties,

@NacosConfigurationProperties注解实现,有兴趣可以继续研究看看,这里就不一一详述了。


接下来讲讲这些配置项在nacos保存在哪里了。

看过我之前nacos启动文章的应该知道nacos启动时相关数据存储有两种方式,默认依赖内置数据库或者改配置mysql数据库。虽然分为两种数据库,但是都是存在相同名称的表中的。

其中默认数据库是derby-data:当你启动nacos后,就可以在nacos\data\derby-data目录下看到对应文件了





至于连接数据库可以直接用idea链接:





需要注意的是derby连接数据库时需要停掉nacos数据中心,不然会报错,这个可能是naocs被占用了,我们一遍使用mysql来当数据源存储。


连接上后发现有这么多表:

接下说几个具体用到的表:

config_info

nacos将配置的基本信息存放在config_info表中,如:dataId、分组、配置描述、配置格式内容等。


config_tags_relation

这张表用来存放一些高级配置参数,如;标签和归属应用等信息,可在nacos控制台UI中,通过他们来过滤查询配置。

his_config_info

这张表nacos用来存放记录相关配置的日志记录,主要用来查询配置的历史信息,当然,nacos的配置历史数据是有时效的,如:只保留30天的历史数据。



config_info_tag

该表用来维护某配置的若干标签基本信息,主要对配置基本信息config_info打了个标签。

config_info_beta

这张表是当我们勾选Beta发布选项后,输入对应下发IP地址(多个用,号分割)时,点击“发布Beta”发布后,对应的beta版配置信息存储在该表中,其是测试版本,与正式版本同时只能存在一个,一般使用较少,停止Beta发布后,实时配置参数即切换为正式版本。

users和roles表:



接下来贴下mysql数据源结构:与上述表结构一致



有些朋友走着走着就丢了,希望我们走路的时候记得回头看看,别搞丢了自己。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言