• 【Springboot】test、dev、stage、prod多环境配置


    本文例程下载:https://files.cnblogs.com/files/heyang78/redisCache_multiEnv_config_210921.rar

    本文适用版本:Spring Boot v2.5.4

    本文使用配置文件类型:YAML,非properties,这种文件用缩进代表层级关系,需要特别注意的是冒号“:”必须是英文类型的,且后面有个空格,如:

    server:
        port: 8080
    myenv:
        name: 开发环境

    如果写成中文冒号,或者冒号后面没有空格,可能会有怪异结果出现,大家务必小心检查。

    下面正文开始

    需求:

    由application.yml指定环境是dev、test或是stage、prod,环境细节在三个不同文件里书写。

    实现步骤:

    1.准备application.yml

    在src/main/resource目录下删除原有文件application.properties(如果有的话),新建文本文件application.yml,内容如下:

    #application.yml
    spring:
        profiles:
            active: dev

    第一行为注释可以忽略,下面三行的意思是让SpringBoot去找application-dev.yml文件(也在src/main/resource目录下),如果将dev修改成prod,那么会让SpringBoot去找application-prod.yml文件,其它test、stage据此类推。

    2.准备application-dev.yml、application-prod.yml、application-test.yml三个文件,三个文件内容如下:

    application-dev.yml

    server:
        port: 8080
    myenv:
        name: 开发环境

    application-prod.yml

    server:
        port: 8088
    myenv: 
        name: 生产环境

    application-test.yml

    server: 
        port: 8085
    myenv: 
        name: 测试环境

    如果还有更多的环境,如application-stage.yml,拷贝一份改名修改即可。

    3.如果上两步都正确,那多环境设置实际就成功了,启动启动类,在控制台可以看到是那种环境启动了,及指定的端口信息:

    2021-09-21。。。。 com.hy.myapp.MyApplication               : The following profiles are active: dev
    2021-09-21。。。。 o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)

    从上面可以看出当前是开发环境,服务端口是8080。

    我们还可以运行测试类来确定当前环境:

    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    class MyApplicationTests {
        @Value("${server.port}")
        private String serverPort;
        
        @Value("${myenv.name}")
        private String myenvName;
        
        @Test
        void contextLoads() {
        }
    
        @Test
        void testEnvironment() {
            System.out.println("myenvName="+myenvName);
            System.out.println("serverPort="+serverPort);
        }
    }

    上面这个类通过Value注解的方式将端口赋予了serverPort成员,环境名称赋予了myenvName成员,我们跑以下junit就知道当前环境了。

    2021-09-21 14:55:42.154  INFO 2300 --- [           main] com.hy.myapp.MyApplicationTests          : Started MyApplicationTests in 3.154 seconds (JVM running for 5.168)
    myenvName=开发环境
    serverPort=8080

    好了,到此SpringBoot的多环境设置就此完毕。主要是配置,没什么技巧,确实不难。虽然一眼就看会了,但还是自己亲手动手做一遍比较好,因为魔鬼经常藏匿在细节中,不亲历亲为,说不定什么时候蹦出来就麻爪了。

    END

  • 相关阅读:
    Hadoop之Linux源代码编译
    《程序猿的修炼——从优秀到卓越》读书笔记(二)——运营和项目管理
    WPF文字渲染相关的问题及解决
    APNS push server端 SSL3.0 转 TLS (iPhone苹果推送服务)
    14西安区域赛总结帖
    linux内核调试+qemu+eclipse【转】
    一步一步粗谈linux文件系统(三)----超级块(superblock)【转】
    block(data block,directory block)、inode、块位图、inode位图和super block概念详解【转】
    Linux文件系统及文件储存方式【转】
    简单虚拟文件系统的设计与实现【转】
  • 原文地址:https://www.cnblogs.com/heyang78/p/15316632.html
Copyright © 2020-2023  润新知