微服务中提取yml配置文件至common模块

9 阅读2分钟

微服务中提取yml配置文件至common模块

在微服务的环境下,配置文件总是令人头大,冗余太多,所以这期我们把配置文件提出来,让子服务的配置文件干净整洁

1.1配置文件说明

在项目中我们通常通过这种方式引入其他配置文件

spring:
  profiles:
    include: common

这时对于被配置文件的命名有要求,必须是

application-common.yml

只要你遵守了这个规则,Spring Boot 就知道要去寻找一个名为这个的配置文件

spring.profiles.include的作用就是无条件的将指定的profile激活,并加载其对应的配置文件

1.2实际使用

这里以user-service和order-service项目举例,这里以redis和mysql配置举例说明

1.2.1传统方式写配置文件

这样写一般配置文件中有很多冗余的内容,并且不利于后期管理,如果想改一个数据库密码,通常要改很多处

user-service传统配置文件

# ==================== 服务端口 ====================
server:
  port: 8081

spring:
  # ==================== 微服务身份标识 ====================
  application:
    name: user-service

  # ==================== MySQL 数据源配置 ====================
  datasource:
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.55.55:3306/bunny_flix?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
    druid:
      initial-size: 5
      max-active: 100
      min-idle: 5

  # ==================== Redis 配置 ====================
  data:
    redis:
      host: 192.168.55.55
      port: 6379
      password: javasm
      database: 0

# ==================== 日志配置 ====================
logging:
  level:
    com.javasm.bunnyflix: debug
    com.alibaba.nacos: warn
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"

1.2.2提取公共部分的配置文件

首先提取公共common配置文件,这里比如提取公共部分,如:数据库连接池,账号密码

这里不单出把配置提出来了,而且在本文件中将配置参数提出,声明到app变量,在配置中通过引入${app.xxx.xxx}来统一管理配置端口号、IP等内容

# ==================== 环境变量(统一管理IP和端口) ====================
app:
  host:
    nacos: 192.168.55.55       # Nacos / Seata 服务器 IP
    mysql: 192.168.55.55       # MySQL 服务器 IP
    redis: 192.168.55.55       # Redis 服务器 IP
    # 用不到的也可以配置,因为是通过资源加载和解析器去加载配置文件的,配置了不用,自然解析器也不会去解析
    es: 192.168.55.55          # Elasticsearch 服务器 IP
    rocketmq: 192.168.55.55    # RocketMQ 服务器 IP
    sentinel: 192.168.55.55    # Sentinel Dashboard IP
    local: 192.168.55.55       # 本机注册到 Nacos 的 IP
  port:
    nacos: 8848
    sentinel: 18080
    sentinel-transport: 8179
    seata: 8091
    rocketmq: 9876

spring:
  # ==================== 数据库公共配置 ====================
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      max-active: 100
      min-idle: 5
  # ==================== Redis 公共配置 ====================
  data:
    redis:
      host: ${app.host.redis}
      port: 6379
      password: javasm

# ==================== 日志配置 ====================
logging:
  level:
    com.javasm.bunnyflix: debug
    com.alibaba.nacos: warn
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"

这是user-service中的配置文件就只剩下独立的配置,如:mysql需要连接的数据库连接,redis中要存入哪个数据库

#配置本服务的端口号
server:
  port: 8081

spring:
  # 微服务架构的“身份证”,告诉整个系统(nacos中心)我叫user-service
  application:
    name: user-service
  # 引入公共配置 common
  profiles:
    include: common
  # mysql连接配置信息  
  datasource:
    url: jdbc:mysql://192.168.0.70:3306/bunny_flix?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
  # redis连接配置信息
  data:
    redis:
      database: 0

可能有人会问,为什么还要单独配置这些,直接都写咋common配置中不行吗?

可以,但是不推荐这么做。每个服务的业务不同,所需要存储的位置也不相同,配置文件的本质就是不修改代码的情况下去修改信息,所以我们需要将公共部分提取出来,不同的部分则需要单独设置