• Spring Cloud Alibaba —— nacos配置中心管理数据库、gateway等配置项


    前言

    在服务的配置和搭建中,往往需要在application.ymlbootstrap.yml文件中进行配置。

    比如:
    一般服务连接数据库的配置。
    gateway 路由配置等。

    如果采取微服务配置的方式,每次进行配置的更新都需要修改配置代码重新打包部署进行服务器上的变更。显得很繁琐。

    于是,可以采取nacos 配置中心实现易变动配置项的配置操作。

    配置和测试

    依赖引入

    既然需要使用到nacos 配置中心,所以最主要的还需要在对应微服务中增加nacos config的依赖引入。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    配置编写

    关于配置项,此处只需要增加服务端口设定配置中心nacos等。

    一般在bootstrap.yml中进行配置,因为bootstrap.yml拥有比application.yml更高的加载优先级

    bootstrap和application区别

    此处的案例,以数据库配置变更做测试。关于gateway的配置管理,依旧可以参考本篇文章。

    server:
      port: 9101
    
    spring:
      application:
        name: nacos-config-product-mysql
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址,注册至nacos注册中心上
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式配置
            #prefix: test-namespace  # 当不想使用 spring.application.name 作为文件名时,可以采取此项配置
            #group: TEST_GROUP   #配置nacos中的配置文件的分组
            #namespace: e361231d-5297-4846-b95e-3f2a4884680d  #自动生成的namespace值
    
    
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    nacos-config中增加配置

    考虑到上述配置中spring.application.name中,设定的微服务别名为nacos-config-product-mysql,且未设定 group 和 namespace属性,所以只需要在nacos-config中的public中增加nacos-config-product-mysql.yaml配置信息。

    spring:
        datasource:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=GMT%2B8
            username: root
            password: root
            type: com.zaxxer.hikari.HikariDataSource
            hikari:
                minimum-idle: 10
                maximum-pool-size: 40
                max-lifetime: 900000
                connection-timeout: 10000
                connection-test-query: select 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    【注意:】此处需要注意,配置文件类型为 yaml ,并非是 yml !!!

    增加测试代码

    关于mybatis-plus的配置等,以及映射类、mapper等配置,此处不做太多的说明,详情参考gitee代码cloudalibaba-mysql-Product-9101

    数据库创建

    数据库表的建表语句为:

    CREATE TABLE test2.`user` (
      `id` bigint(20) NOT NULL COMMENT '主键ID',
      `user_name` varchar(30) DEFAULT NULL COMMENT '姓名',
      `user_age` int(11) DEFAULT NULL COMMENT '年龄',
      `user_email` varchar(50) DEFAULT NULL COMMENT '邮箱',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    测试环境需要准备两个数据库:mybatis_plustest2.

    启动项目观察log

    nacos-config中的默认配置信息如下:
    在这里插入图片描述
    这个数据库中的user表是存在数据的。

    启动项目后,控制台数据如下所示:
    在这里插入图片描述
    由于本地没有数据库的配置信息,在项目启动时,会先从nacos config中,根据spring.application.name信息,查找指定的nacos-config-product-mysql.yaml配置信息。
    拉取本地,并进行项目的启动。

    测试请求

    http://localhost:9101/test/getUsers

    在这里插入图片描述

    变更数据库配置地址

    修改nacos config中的nacos-config-product-mysql.yaml内容。

    如:修改数据库为test2

    在这里插入图片描述
    点击发布

    确认发布后,对应微服务的控制台中输出如下日志信息:
    在这里插入图片描述
    表示配置项已动态变更

    重新请求测试:

    http://localhost:9101/test/getUsers

    在这里插入图片描述

    关于 @RefreshScope

    有人可能会想到 Java bean 上增加 @RefreshScope 注解信息,才会刷新已配置的bean。这里未体现增加该注解,为什么也会刷新?

    其实,这是一个思维误区!

    @RefreshScope 注解主要是在设定自定义bean的配置类中,比如xxxConfig中存在参数信息需要从配置中心获取。如果该项参数内容变更,则需要也刷新自定义的bean,此时才需要增加@RefreshScope注解信息。

    代码地址

    gitee 代码地址

  • 相关阅读:
    前端面试:webpack整理
    钙尔奇30周年以行动,力挺中国骨骼健康发展
    灰狼算法Grey Wolf Optimizer跑23个经典测试函数|含源码
    el-tree 获取过滤后的树结构
    通过redis学网络(2)-redis网络模型
    Ubuntu关闭休眠模式
    【Vue面试题二十】、你有写过自定义指令吗?自定义指令的应用场景有哪些?
    【食品加工技术】第三章 淀粉制糖与糖果加工技术 笔记
    SpringMVC源码(1)-文件上传请求
    GO语言篇之WebAssembly
  • 原文地址:https://blog.csdn.net/qq_38322527/article/details/125616703