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