「初学者商城」- 接口 - 多环境(新功能)

1. 前言


通常,项目会有多个运行环境:开发、测试,生产等。每个环境的配置文件都需要单独管理,并且需要能动态指定,获取。


2. 源码


完整项目地址:接口后台部署

v1.2 标签地址:接口后台部署

v1.2 下载地址:接口 ziptar.gz。后台 ziptar.gz。部署 ziptar.gz

注:对于标签的说明「初学者商城」- 写在最前面 #5.1


3. 接口


注:查看更改内容:多环境

3.1 需要多环境的工程

  1. 网关工程:osc-gateway-service
  2. 基础工程:osc-base-service
  3. 日志工程:osc-log-service

3.2 如何拆

  1. 共通的配置
  2. 经常更改的配置
  3. 单独且基本上不变的配置

3.3 配置文件及位置

SpringBoot 会默认加载哪些名称的配置文件:

  1. application.yml
  2. application.properties

SpringBoot 会默认加载哪些位置的配置文件:

  1. classes/
  2. classes/config/

3.4 实现思路

注:这里以基础工程为例

3.4.1 指定环境

注:指定环境的配置要写在application.ymlapplication.properties

spring:
  # 选择环境
  profiles:
    ## 开发环境
    active: dev
    ## 测试环境
    ## active: stg
    ## 生产环境
    ## active: prd
  • 使用spring.profiles.active来指定
  • 此时指定的是开发环境

3.4.2 区分环境

注:有两种方式来区分

第一种,使用spring.profiles区分:

spring:
  ## 开发环境
  profiles: dev

第二种,使用文件名区分:

application-dev.yml

通常这两种方式都会使用上,在application.ymlapplication.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 其它

  1. 版本号的升级

4. 验证


4.1 接口

  1. 下载v1.2标签的代码或者对照本篇博客更改v1.1标签的代码
  2. 给本地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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值