本文介绍: 提示文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

提示文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


配置管理

在这里插入图片描述
在这里插入图片描述

到目前为止我们已经解决了微服务相关的几个问题

不过,现在依然还有几个问题需要解决:

这些问题可以通过统一的配置管理服务解决。而Nacos不仅仅具备注册中心功能,也具备配置管理功能

在这里插入图片描述
服务共享配置可以统一交给Nacos保存和管理,在Nacos控制修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新

网关路由同样是配置,因此同样可以基于这个功能实现动态路由功能,无需重启网关即可修改路由配置。

1.配置共享

我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。分为两步:

1.1.添加共享配置

以cart-service为例,我们看看哪些配置是重复的,可以抽取的:
首先是jdbc相关配置:
在这里插入图片描述
然后日志配置:
在这里插入图片描述
然后swagger以及OpenFeign的配置:
在这里插入图片描述

我们在nacos控制台分别添加这些配置。

首先是jdbc相关配置,在配置管理->配置列表点击+新建一个配置:
在这里插入图片描述
在弹出的表单中填写信息
在这里插入图片描述
其中详细的配置如下:

spring:
  datasource:
    url: jdbc:mysql://${hm.db.host:192.168.150.101}:${hm.db.port:3306}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${hm.db.un:root}
    password: ${hm.db.pw:123}
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

注意这里的jdbc的相关参数并没有写死,例如:

然后是统一的日志配置,命名为sharedlog.yaml,配置内容如下:

logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"

然后是统一的swagger配置,命名为shared-swagger.yaml,配置内容如下:

knife4j:
  enable: true
  openapi:
    title: ${hm.swagger.title:黑马商城接口文档}
    description: ${hm.swagger.description:黑马商城接口文档}
    email: ${hm.swagger.email:zhanghuyi@itcast.cn}
    concat: ${hm.swagger.concat:虎哥}
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - ${hm.swagger.package}

1.2.拉取共享配置

接下来,我们要在微服务拉取共享配置。将拉取到的共享配置与本地application.yaml配置合并,完成项目上下文的初始化
不过,需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext初始化处理的,发生在项目的引导阶段然后才会初始化SpringBoot上下文,去读取application.yaml
也就是说引导阶段application.yaml文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?

SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了。

在这里插入图片描述
因此,微服务整合Nacos配置管理步骤如下:
1)引入依赖
在cart-service模块引入依赖

  <!--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>

2)新建bootstrap.yaml
在cart-service中的resources目录新建一个bootstrap.yaml文件
[图片]
内容如下:

spring:
  application:
    name: cart-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.150.101 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置

3)修改application.yaml
由于一些配置挪到了bootstrap.yaml,因此application.yaml需要修改

server:
  port: 8082
feign:
  okhttp:
    enabled: true # 开启OKHttp连接池支持
hm:
  swagger:
    title: 购物车服务接口文档
    package: com.hmall.cart.controller
  db:
    database: hm-cart

重启服务,发现所有配置都生效了。

2.配置热更新

有很多的业务相关参数,将来可能会根据实际情况临时调整。例如购物车业务,购物车数量有一个上限,默认是10,对应代码如下:
在这里插入图片描述
现在这里购物车是写死的固定值,我们应该将其配置在配置文件中,方便后期修改
但现在的问题是,即便写在配置文件中,修改了配置还是需要重新打包、重启服务才能生效。能不能不用重启,直接生效呢?

这就要用到Nacos的配置热更新能力了,分为两步:

  • 在Nacos中添加配置
  • 在微服务读取配置

2.1.添加配置到Nacos

首先,我们在nacos中添加一个配置文件,将购物车的上限数量添加到配置中:
在这里插入图片描述

注意文件的data Id格式: [服务名]-[spring.active.profile].[后缀名]

文件名称由三部分组成:

  • 服务名:我们是购物车服务,所以是cartservice
  • spring.active.profile:就是spring boot中的spring.active.profile,可以省略,则所有profile共享该配置
  • 后缀名:例如yaml

这里我们直接使用cart-service.yaml这个名称,则不管是dev还是local环境都可以共享该配置。
配置内容如下:

hm:
  cart:
    maxAmount: 1 # 购物车商品数量上限

提交配置,在控制台能看到新添加的配置:
在这里插入图片描述

2.2.配置热更新

接着,我们在微服务中读取配置,实现配置热更新。
在cart-service新建一个属性读取类:
在这里插入图片描述
代码如下:

package com.hmall.cart.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {
    private Integer maxAmount;
}

接着,在业务中使用该属性加载类:
在这里插入图片描述
测试,向购物车中添加多个商品:
在这里插入图片描述
我们在nacos控制台,将购物车上限配置为5:
在这里插入图片描述
无需重启,再次测试购物车功能
在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_48052161/article/details/134677046

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_5571.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注