问题导入

在开发中 我们有开发环境 、测试环境、 生产环境 每次打包都要手动去改ip 端口号 密码等配置 是非常麻烦的 所以有了对环境配置 通过maven 实现

  • yaml文件多环境启动

在实际开发中,项目的开发环境、测试环境、生产环境的配置信息是否会一致?如何快速切换?

1. 首先这pom 文件里添加配置

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <!--  默认激活-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
        </profile>
    </profiles>

我这里只配置了两个 如配置其他的参考prod 默认 maven 使用dev

2. application.yml 配置文件

将公共的配置抽出来 就是不需要改IP 获取端口号 密码等到配置信息抽出来 公共的配置

server:
 port: xxxxx
 servlet:
   # 应用的访问路径
   context-path: /
   multipart:
     enabled: true #开启文件上传
     max-file-size: 100MB #限制文件上传大小为10M
     max-request-size: 100MB
 tomcat:
   # tomcat的URI编码
   uri-encoding: UTF-8
   # 连接数满后的排队数,默认为100
   accept-count: 1000
   threads:
     # tomcat最大线程数,默认为200
     max: 800
     # Tomcat启动初始化的线程数,默认值10
     min-spare: 100


# Spring配置
spring:
 messages:
   basename: i18n/messages
 profiles:
   active: @profiles.active@
 servlet:
   multipart:
     enabled: true
     max-file-size: 20MB
     max-request-size: 1000MB

重点是 @profiles.active@

3. application-dev.yml 配置文件

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://192.168.xx.xx:xxxx/xxxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: xxxx
                password: xxxxx
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url:
                username:
                password:
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username:
                login-password:
            filter:
                config:
                    # 是否配置加密
                    enabled: false
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true
    data:
        mongodb:
            uri: mongodb://192.168.xx.xx:xx/xxxxxx
        multipart:
            # 单个文件大小
            max-file-size: 100GB
            # 设置总上传的文件大小
            max-request-size: 100GB
    # 服务模块
    devtools:
        restart:
            # 热部署开关
            enabled: true
    # redis 配置
    redis:
        # 地址
        host: 192.168.x.xx
        # 端口,默认为6379
        port: xxxx
        # 数据库索引
        database: x
        # 密码
        password:
        # 连接超时时间
        timeout: 10s
        lettuce:
            pool:
                # 连接池中的最小空闲连接
                min-idle: 0
                # 连接池中的最大空闲连接
                max-idle: 8
                # 连接池的最大数据库连接数
                max-active: 8
                # #连接池最大阻塞等待时间(使用负值表示没有限制)
                max-wait: -1ms

application-prot.yml 同理

4. Maven 使用

springboot Javamailsender 多环境 springboot多环境yml配置_连接池

在打包或者运行项目的时候 勾选你想要的环境就行了