1. 前言
通常,项目会有多个运行环境:开发、测试,生产等。每个环境的配置文件都需要单独管理,并且需要能动态指定,获取。
2. 源码
v1.2 下载地址:接口 zip,tar.gz。后台 zip,tar.gz。部署 zip,tar.gz。
注:对于标签的说明「初学者商城」- 写在最前面 #5.1
3. 接口
注:查看更改内容:多环境
3.1 需要多环境的工程
- 网关工程:osc-gateway-service
- 基础工程:osc-base-service
- 日志工程:osc-log-service
3.2 如何拆
- 共通的配置
- 经常更改的配置
- 单独且基本上不变的配置
3.3 配置文件及位置
SpringBoot 会默认加载哪些名称的配置文件:
- application.yml
- application.properties
SpringBoot 会默认加载哪些位置的配置文件:
- classes/
- classes/config/
3.4 实现思路
注:这里以基础工程为例
3.4.1 指定环境
注:指定环境的配置要写在application.yml
或application.properties
中
spring:
# 选择环境
profiles:
## 开发环境
active: dev
## 测试环境
## active: stg
## 生产环境
## active: prd
- 使用
spring.profiles.active
来指定 - 此时指定的是
开发环境
3.4.2 区分环境
注:有两种方式来区分
第一种,使用spring.profiles
区分:
spring:
## 开发环境
profiles: dev
第二种,使用文件名
区分:
application-dev.yml
通常这两种方式都会使用上,在application.yml
或application.properties
主配置文件中有时候还是会写一些不同环境都经常更改的配置,如端口;但是有一点需要注意,不同环境都写到这一个配置文件里面来,肯定就有了多个spring.profiles
,这时想让它们都共存,就得使用---
分隔符:
---
# 端口
server:
port: 8080
spring:
## 开发环境
profiles: dev
## 单个环境经常改动的配置
---
# 端口
server:
port: 8080
spring:
## 测试环境
profiles: stg
## 单个环境经常改动的配置
---
# 端口
server:
port: 8080
spring:
## 生产环境
profiles: prd
## 单个环境经常改动的配置
---
3.5 具体实现
注:这里以基础工程为例
application.yml:
spring:
# 选择环境
profiles:
## 开发环境
active: dev
## 测试环境
## active: stg
## 生产环境
## active: prd
## 多个环境的公用配置
application:
# 应用名称
name: base-service
# 配置 Flyway
flyway:
## sql 脚本的位置,默认为 classpath:db/migration。可手动指定
locations: classpath:db/zwc
## 开启,默认开启
enabled: true
# 配置链路中心地址
zipkin:
# 为了 docker 设置 zipkin 服务器地址准备
host: 127.0.0.1
# 指定了 zipkin 服务器的地址
base-url: http://${spring.zipkin.host}:9411
sleuth:
sampler:
# 将采样比例设置为 1.0,也就是全部都需要。默认是 0.1
probability: 1.0
eureka:
server:
# 为了 docker 设置注册中心地址准备
host: 127.0.0.1
instance:
# 使用 ip 代替实例名
prefer-ip-address: true
# 实例的主机名
hostname: ${spring.cloud.client.ip-address}
# 实例的 ID 规则
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
client:
serviceUrl:
# 注册中心地址
defaultZone: http://${eureka.server.host}:8761/eureka/
management:
endpoints:
web:
exposure:
# 开启监控端点
include: hystrix.stream
# 打印 sql 日志
logging:
level:
com.zwc.base.mapper: debug
---
# 端口
server:
port: 8080
spring:
## 开发环境
profiles: dev
## 单个环境经常改动的配置
---
# 端口
server:
port: 8080
spring:
## 测试环境
profiles: stg
## 单个环境经常改动的配置
---
# 端口
server:
port: 8080
spring:
## 生产环境
profiles: prd
## 单个环境经常改动的配置
---
- 第一部分指定了环境
- 第二部分共通的配置
- 第三部分不同环境的配置(使用
---
符号分隔)
接下来就把不同环境的配置单独写在一起(注意文件名和文件位置)
application-dev.yml:
spring:
datasource:
# 为了 docker 设置 MySQL 地址准备
host: 127.0.0.1
# 连接 MySQL
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${spring.datasource.host}:3306/osc_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
username: root
password: 123456
# 连接 Redis
redis:
database: 0
host: localhost
port: 6379
password:
# 连接 MongoDB
data:
mongodb:
host: 127.0.0.1
# 无密码
uri: mongodb://${spring.data.mongodb.host}:27017/osc_db
# 有密码(name:用户名 / password:密码)
# uri: mongodb://zwc:123456@${spring.data.mongodb.host}:27017/osc_db
application-prd.yml:
spring:
datasource:
# 为了 docker 设置 MySQL 地址准备
host: 127.0.0.1
# 连接 MySQL
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${spring.datasource.host}:3306/osc_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
username: root
password: 123456
# 连接 Redis
redis:
database: 0
host: localhost
port: 6379
password: 123456789
# 连接 MongoDB
data:
mongodb:
host: 127.0.0.1
# 无密码
# uri: mongodb://${spring.data.mongodb.host}:27017/osc_db
# 有密码(name:用户名 / password:密码)
uri: mongodb://zwc:123456@${spring.data.mongodb.host}:27017/osc_db
application-stg.yml:
spring:
datasource:
# 为了 docker 设置 MySQL 地址准备
host: 127.0.0.1
# 连接 MySQL
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${spring.datasource.host}:3306/osc_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
username: root
password: 123456
# 连接 Redis
redis:
database: 0
host: localhost
port: 6379
password: 123456789
# 连接 MongoDB
data:
mongodb:
host: 127.0.0.1
# 无密码
# uri: mongodb://${spring.data.mongodb.host}:27017/osc_db
# 有密码(name:用户名 / password:密码)
uri: mongodb://zwc:123456@${spring.data.mongodb.host}:27017/osc_db
3.6 其它
- 版本号的升级
4. 验证
4.1 接口
- 下载
v1.2
标签的代码或者对照本篇博客更改v1.1
标签的代码 - 给本地
Redis
设置密码,然后启动项目,访问接口http://localhost:8000/baseService/visit/toVisit
后,base-service
工程的控制台如果报错就证明多环境配置成功
...
org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)
...
Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:118)
at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:109)
at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:57)
...
5. 结语
远离杂乱无章的环境配置。阿,快乐。
希望能够帮助到你
over