SpringBoot项目多层级多环境yml设计

5,762 阅读3分钟

需求场景

基础设施模块中有一些通用固定的基础配置。例如:日志的配置,Spring本身的配置以及MyBatis Plus相关的固定配置等等。 这些配置往往与环境无关,如何复用?

# 日志配置
logging:
  level:
    # 记得配置到包名
    com.agileboot: debug
    org.springframework: info
  pattern:
    console: "%date %thread %green(%level) [%cyan(%logger{10}):%magenta(%line)] %red(%method) | %msg%n"


# Spring配置
spring:
  # 文件上传
  servlet:
     multipart:
       # 单个文件大小
       max-file-size:  10MB
       # 设置总上传的文件大小
       max-request-size:  20MB
  mvc:
    pathmatch:
      matching-strategy: ANT_PATH_MATCHER
  jackson:
    deserialization:
      fail-on-unknown-properties: false
    serialization:
      write-dates-as-timestamps: false
    date-format: yyyy-MM-dd HH:mm:ss

基础设施模块中还有一些独立于环境的配置。例如Mysql和Redis或者MQ之类的。如何区分环境?

# 数据源配置
spring:
    # redis 配置
    redis:
        # 地址
        host: localhost
        # 端口,默认为6379
        port: 36379
        # 数据库索引
        database: 0
        # 密码
        password: 12345
        # 连接超时时间
        timeout: 10s
        lettuce:
            pool:
                # 连接池中的最小空闲连接
                min-idle: 0
                # 连接池中的最大空闲连接
                max-idle: 8
                # 连接池的最大数据库连接数
                max-active: 8
                # #连接池最大阻塞等待时间(使用负值表示没有限制)
                max-wait: -1ms

日志相关的配置我们一般都配在logback.xml文件中。如何实现不同环境日志路径不一样?

想要达到的效果

  1. 复用基础设施模块中的固定配置。
  2. 区分多环境的配置。
  3. logback日志引入多环境配置。

详细代码实现在开源项目Agileboot中:github.com/valarchie/A…

实现

假设我们有一个Admin模块,我们可以给它定义一份application.yml文件。文件中描述该模块特定的配置。比如端口,访问路径之类的。

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080
  servlet:
    # 应用的访问路径
    context-path: /
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100


# Spring配置 如果需要无Mysql  无Redis直接启动的话  dev改为test
# 生产环境把dev改为prod
spring:
  profiles:
    active: basic,dev

在基础设施模块中新建
applicaiton-basic.yml,配置一些与环境无关的基础固定复用配置。
application-dev.yml,配置一些和环境相关的配置,例如数据库的配置。

然后在spring.profiles.active配置中指定basic和dev文件。

图片.png

此时springboot会自动去找applicaiton-basic.ymlapplication-dev.yml文件。
所以我们最终的配置文件是由applicaiton.yml+applicaiton-basic.yml+applicaiton-dev.yml叠加的配置。

日志的多环境配置,我们可以新建一份logback-spring.xml文件。 假设我们想要根据环境配置不同的日志路径。可以在例如application-dev.yml文件中配置logging.file.path。

图片.png 然后在logback-spring.xml文件中使用springProperty标签读取多环境yml中配置的路径。

图片.png
此时日志的路径就会分别读取不同环境配置的路径了。

关于多层级多环境的yml及日志设计的内容比较少。在此稍作总结,希望有帮助到有类似需求的人。

欢迎加入全栈技术交流群:1398880