java项目如何配置不同环境变量 以及 原理

如何配置不同的profile

首先,一个java项目,需要有不同的环境配置,打包时,自动使用对应的配置。那么,如何实现呢?

在你的Spring Boot项目的src/main/resources目录下创建或添加一个application.yml文件。这是Spring Boot默认查找配置文件的位置。这个文件,可以添加通用的配置。

然后,还可以在同个目录下,创建如application-test.yml, application-prod.yml等文件,Spring Boot会自动识别这些profile-specific的配置文件。你可以在这些文件中,定义不同环境的参数,例如,数据库地址呀,redis缓存地址呀等。
即,src/main/resources目录下,可以有类似这样几个文件:

application.yml
application-prod.yml
application-test.yml

然后,可以application-test.yml, application-prod.yml, 声明2个变量一样,值不一样的配置。举个例子
application-test.yml:

mysql:
  url: https://xx.test.com/mysql

application-prod.yml:

mysql:
  url: https://xx.online.com/mysql

在java代码中,就可以动态使用这个url:

    @Value("${mysql.url}")
    protected String mysqlUrl;

完美。

那么,系统运行时,是如何自动使用对应的profile-specific.yml文件呢?请看下文

Profile自动切换的原理

我们从外网内,来看环境变量,是如何一层层传递到项目里的。
首先,一个java项目,一般就是docker来打包了。所以,从docker开始说起:

  1. docker打包命令,带上环境参数:
docker build -f assistant-web-api/qke/Dockerfile -t docker-registry.qiyi.virtual/mbd-ai/assistant-web-api-test:$tag . --build-arg dc_env=test

关键词,build-arg ,设置了个参数,dc_env=test

  1. Docker文件,声明要dc_env,且用于mvn命令
ARG dc_env
...
RUN mvn -T 8 -DdisableRpm=true -pl '!assistant-web-manager' clean package -Dmaven.test.skip=true -P${dc_env}

注意,-P表示设置profile

  1. pom.xml,配置不同的环境

上一步的mvn命令,加了-P,是在哪里用呢? 当然是在marven的配置文件,也就是pom.xml中。

<profiles>
        <profile>
            <id>test</id>
            <properties>
                <profile.active>test</profile.active>
                <log.env>test</log.env>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profile.active>prod</profile.active>
                <log.env>prod</log.env>
            </properties>
        </profile>
    </profiles>

上面,加了2个环境变量。每个变量,设了properties,即profile.active
这个值,哪里能用呢?

在主application.yml文件中用!

server:
  profiles:
    active: @profile.active@

定义要用哪个Profile,就根据上一步的profile.active变量来的值了。

自此,从docker打包定义的变量,就传递到了主yml文件中。这个文件,server.profiles.active是哪个值,就会用哪个子yml的配置。例如,如果是test,则会加载application-test.yml的配置!!!

开发环境中,如何切换环境

  1. 首先,marven先sync一下。sync后,勾选某个环境。
    在这里插入图片描述

  2. 接着,本地编译打包,并通过-P,指定环境变量:
    在这里插入图片描述

  3. 最后,要运行了,点击下图的右上角,有个Edit Configuration,出来弹窗,在Active Profile中,填入对应的环境变量,例如test
    在这里插入图片描述

  4. 最后,就可以点击运行了!

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newchenxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值