Nacos实现共享配置和配置热更新

1.配置共享

在微服务中,有很多配置都是相同的,所以可以把相同的部分放在nacos中,在每个服务中拉取,这样就可以简化配置了

1.1创建共享配置文件

以jdbc的配置为例,我的项目中关于数据库部分除了不同服务的数据库名不一样,其他的配置都是一样的,因此把关于数据库的配置以及mybatis配置提到共享文件中

打开Nacos,新建一个配置文件

配置内容填入你想拉取的部分,如

spring:
  datasource:
    url: jdbc:mysql://${example.db.host}:${example.db.port:3306}/${example.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ${example.db.pw}


mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

注意,这里可以像在yaml文件中配置一样,使用占位符来代替原本的内容,比如

${example.db.host} 最终取值是你服务中的application.yaml配置文件的example.db.host值

${example.db.port:3306} 冒号后设默认值,如果在application中有对应的值则为对应值,否则为3306

确认无误后发布即可

1.2拉取共享配置文件

现在共享的部分已经上传到了nacos,那么原本我们的yaml文件中相对应的配置部分就可以删除了,记得配置共享配置文件中所需要的参数即可(${这样的参数})

需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml而SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,因此我们需要把nacos的地址写在bootstrap中,否则是无法读取到的

首先导入依赖

  <!--nacos配置管理-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  <!--bootstrap-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
  </dependency>

接着配置bootstrap文件

spring:
  application:
    name: your-service # 服务名称
  profiles:            
    active: dev    # 环境
  
  cloud:
    nacos:
      server-addr: 192.168.230.131 # nacos地址
      
      config:
        file-extension: yaml # 文件后缀名

        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享配置的名字


原本的application.yaml修改后为

server:
  port: 8082

example:
  db:
    database: example-A
    pw: 123456
  # .......等一系列共享配置中所需的参数

至此,重启服务,共享配置就可以成功的拉取了

2.配置热更新

有很多参数会经常变动,不能每次变动都重启服务,因此需要参数的热更新,同样是使用nacos就可以实现,但是有两个前提条件

1.微服务中要以特定方式来读取配置,如通过@ConfigurationProperties注解来绑定值

2.Nacos中配置文件取名规则: [application.name]-[active.profile].[file.extension] 也就是:服务名-profile.文件后缀,其中profile可以写也可以不写,不写的话默认所有环境都生效

2.1创建属性类

比如说有两个参数一个是最大人数,一个是最大车辆数,这两个参数需要经常修改,我们可以用一个属性读取类来定义它们,使用@ConfigurationProperties来满足第一个条件

@Data
@Component
@ConfigurationProperties(prefix = "example.number")
public class NumberProperties {
    //人数最大数量
    private Integer maxPerson;
    //车辆最大数量
    private Integer maxVehicle;
}

2.2创建配置文件

在nacos中创建文件,名称按照要求来,比如说我创建一个dev环境下生效的配置

服务名,环境,后缀 这三个部分其实都在bootstrap中有过定义,可以照抄

其中配置内容如下,注意,要跟自己的属性读取类对应上

example:
    number:
        maxPerson: 10
        maxVehicle: 2

将配置文件发布,这样启动服务后,通过修改nacos中的配置文件,就可以实现配置热更新了

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值