• 公司新来的实习生问我SpringBoot多个环境的配置方式


    这是一篇写给新手的文章,老手可以绕行了。

    起因是一个同学让我帮他看个问题,他说有两个环境,一个环境有问题,另一个环境没问题,但是一直找不到原因,假设一个环境是 dev,另一个环境是 test。

    于是,我远程了他的机器,想分别看下两个环境的现象,结果发现没有地方可以配置环境。我问他是怎么切换环境的,他说要连另外一个环境就把 application.yml 中的配置改了,之后切换回来的时候再改回来。

    我当时直接就无语住了。后来想想他还没毕业,不知道也正常,我刚学 Spring Boot 的时候连多个环境都不知道,也是后来正式加入工作团队后才学来的。

    我们平时做项目的时候,一般都会分几套环境,开发环境、测试环境、预发布环境以及生产环境。每一套环境的配置都是不一样的,比如数据库连接串不一样、redis不一样,还有其他一些配置很可能都不一样。

    那这时候,我们切换环境的时候就不能像前面说的那样手动改配置文件的内容了,那样既傻又费事。

    有两种区分多个环境的方式可以使用。

    多个配置文件

    当配置Spring Boot应用程序的多个环境时,使用多配置文件的方式,通常会使用以下约定:application-{profile}.yml,其中{profile}是配置文件的名称。在这些配置文件中,你可以根据不同的环境指定不同的属性值。

    例如 application-dev.yml 表示开发环境, application-test.yml 表示测试环境application-prod.yml 表示生产环境,还有一个 application.yml表示通用的公共配置。

    图片

    通用配置文件 application.yml

    和环境无关的配置都可以放在这里,例如启动端口号、服务名称以及其他共用属性等。

    还可以在通用配置中设置 spring.profiles.active来控制启动配置,比如配置成 dev,那就是用 application-dev.yml的配置。

    1. server:
    2.   port: 9000
    3. spring:
    4.   application:
    5.     name: fengzheng
    6.   profiles:
    7.     # 环境配置
    8.     active: dev
    9.     
    10. common:
    11.  key: 公共 key

    各环境配置

    除了通用配置外, 其他几个配置文件就是配置与各自环境有关的配置了,比如开发环境和测试环境使用不用的数据库服务器,不同的redis集群,这就要在各自的配置中区分开来。

    dev 环境配置文件 application-dev.yml

    1. dev-property: dev-value
    2. dev-another-property: dev-another-value
    3. # Dev 环境的数据库配置
    4. spring:
    5.   datasource:
    6.     url: jdbc:mysql://localhost:3306/devdb
    7.     username: devuser
    8.     password: devpassword
    1. test 环境配置文件 application-test.yml

    1. test-property: test-value
    2. test-another-property: test-another-value
    3. Test 环境的数据库配置
    4. spring:
    5.   datasource:
    6.     url: jdbc:mysql://localhost:3306/testdb
    7.     username: testuser
    8.     password: testpassword
    1. prod 环境配置文件 application-prod.yml

    1. prod-property: prod-value
    2. prod-another-property: prod-another-value
    3. # Prod 环境的数据库配置
    4. spring:
    5.   datasource:
    6.     url: jdbc:mysql://production-db-url:3306/proddb
    7.     username: produser
    8.     password: prodpassword

    指定环境启动

    之后在启动项目的时候,就可以通过-Dspring.profiles.active来指定使用的配置文件,也就是指定的环境了。

    java -jar myapp.jar -Dspring.profiles.active=dev
    

    例如上面的命令,将激活 application-dev.yml 中的配置。

    在 IDEA 中,通过 "Run/Debug Configurations",在 VM options 中加入相应的配置启动,可以直接连接到对应的环境。

    图片

    或者找到 Active profiles ,直接在后面填写对应的配置名称也可以。

    图片

    在一个配置文件中配置多个环境

    除了使用多个配置文件,用后缀区分外,还可以直接在一个配置文件中配置多个环境。

    例如下面的配置,把公共配置写在最前面,然后之后每一个环境的配置用 ---区分,spring.profiles来指定当前段落代表的配置。

    1. spring:
    2.   application:
    3.     name: fengzheng
    4.     
    5. ---    
    6. spring:
    7.   profiles: dev
    8.   datasource:
    9.     url: jdbc:mysql://production-db-url:3306/dev-db
    10.     username: produser
    11.     password: prodpassword
    12. server:
    13.   port: 1990
    14. ---
    15. spring:
    16.   profiles: test
    17.   datasource:
    18.     url: jdbc:mysql://production-db-url:3306/test-db
    19.     username: produser
    20.     password: prodpassword
    21. server:
    22.   port: 1991
    23. ---
    24. spring:
    25.   profiles: prod
    26.   datasource:
    27.     url: jdbc:mysql://production-db-url:3306/prod-db
    28.     username: produser
    29.     password: prodpassword
    30. server:
    31.   port: 1992

    之后启动项目的时候,和前面多个配置文件的方式一样。

    通过-Dspring.profiles.active来指定使用的配置文件,也就是指定的环境了。

    java -jar myapp.jar -Dspring.profiles.active=dev
    

    例如上面的命令,将激活 application-dev.yml 中的配置。

    在 IDEA 中,通过 "Run/Debug Configurations",在 VM options 中加入相应的配置启动,可以直接连接到对应的环境。

    图片

    或者找到 Active profiles ,直接在后面填写对应的配置名称也可以。

    图片

    如果感觉本文对你有帮助,点赞关注支持一下,想要了解更多Java后端,大数据,算法领域最新资讯可以关注我公众号【架构师老毕】私信666还可获取更多Java后端,大数据,算法PDF+大厂最新面试题整理+视频精讲

  • 相关阅读:
    ​Python实战案例:航班票价预测这样做,效果真好啊
    关于python字符串
    WordPress页脚配置备案号
    LockSupport与线程中断
    减少软件故障、防范黑客攻击,软件质量安全问题不容忽视
    十大排序 —— 希尔排序
    arcPy与添加 shp 文件(显示在 ArcMap),通过Arcpy打开mxd文档并添加数据的方式
    关于漏洞怎么挖/SRC刷分技巧
    MySQL SQL优化
    JUC-Java线程
  • 原文地址:https://blog.csdn.net/Javatutouhouduan/article/details/133280083