Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

Stella981
• 阅读 784

写在前面

       最近由于项目要求,原先的项目只有开发环境的项目配置,后来不利于线上测试,于是,最近对于SpringBoot这部分多环境配置在网上查找了相关资料,并实现了配置,于是为了防止遗忘,特在此进行总结。

  在此,感谢以下博主的文章:

       https://blog.csdn.net/qq_35139965/article/details/82255479

       https://blog.csdn.net/weixin_33347597/article/details/81039153

好啦,废话不多说,开启正文(好像很正式的样子呢。。。。。。)

SpringBoot多环境配置文件

下面以一个小案例,进行说明。

如图所示,下图是案例中的三个配置文件,其中,

application.yml是启动服务时,服务器会自动加载的配置文件,

application-dev.yml 表示的是开发环境的配置文件,

application-prod.yml 表示的是生产环境的配置文件,

对于,dev和prod这两个文件在启动服务时,服务器不会自动加载,那么在不同的环境中时怎么调用不同的文件的呢?

Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

 主要有以下两种方式:

方式一:通过修改配置文件 application.yml中Spring.profile.active的值,来指定加载的配置,

也就是说,如果Spring.proflie.active=dev,则在启动服务之后,服务器就会加载application-dev.yml,若值为test或者prod,修改方式一致。

下面上图说明:

Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

方式二:使用命令启动服务,命令中带参数方式(此方式可以没有application.yml文件)

具体操作步骤如下:

1>  进入到项目目录下,先用mvn install命令对项目进行打包,执行完此步骤后,会在项目对应的target目录下生成该项目对应的jar包

Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

 2>  进入target目录,执行命令:java -jar 生成的jar包 --spring.profiles.active=prod

 Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

 通过此命令之后,项目就会调用application-prod.yml配置文件,即以生产环境的配置要求启动服务。同理,若是开发环境,只需将prod改为dev即可。

方式三:此种方式是根据方式一延伸出的,更为灵活

具体步骤如下:

1> application.yml中将spring.profiles.active的值改成spring.profiles.active=@activatedProperties@,这里的@activatedProperties@是一个变量对应pom文件里的环境配置。

下面为pom文件的配置

<id>dev</id>
            <properties>
                <!-- 环境标识,需要与配置文件的名称相对应 -->
                <activatedProperties>dev</activatedProperties>
            </properties>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                   <!-- 测试环境 --> 
                <activatedProperties>test</activatedProperties>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                   <!-- 生产环境 -->
                <activatedProperties>prod</activatedProperties>
            </properties>
        </profile>
</profiles>  

对这段代码做下说明:

首先在maven中配置了两个环境的配置文件,一个测试环境test,一个生产环境prod;

其中

<profiles.active></profiles.active>  是变量的key,test是变量的value

注意:dev中的dev与配置文件名称application-dev.yml要一致
activatedProperties名称对应application.properties配置文件中的spring.profiles.active=@activatedProperties@

当maven打包时会用pom文件里dev中的值替换掉application.properties配置文件中的@activatedProperties@

2>  执行Maven打包命令mvn clean package,观察控制台日志

Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

已经构建成功,刷新一下项目,target会生成SpringbootMybatis-0.0.1-SNAPSHOT.jar包。

可能出现的问题

1.=='@' that cannot start any token. (Do not use @ for indentation)
在本地启动该项目时有时候会报如下错误

found character '@' that cannot start any token. (Do not use @ for indentation) in 'reader', line 4, column 11: name: @profiles.active@ 

意思是识别不了@profiles.active@这个变量,这是因为这个变量没有被替换成我们需要的参数,如test,prod等,所以在本地启动时要加上参数启动,这样springboot会自动替换掉这个变量。

作者使用的是idea,所以启动springboot时在右上Edit Configurations-->Active Profiles 增加一个参数,参数值为你需要运行的环境名称,如test

注:上述中的application-dev.yml、application-prod.myl等只是演示案例中名字,并非所有项目都是如此,还请各位以实际项目为主。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Easter79 Easter79
3年前
springboot中切换配置(多个配置文件
问题描述:在springboot项目中可能有测试环境、开发环境、生产环境,在这些环境中我们可能要使用不同的配置,如果每次切换环境的时候都要重新写一份配置文件就很麻烦了,所以下面提供一种方法可以快速且简便的切换不同环境下的配置。解决方案:1、首先在resources目录下创建完整的配置文件(包括测试、开发、生产环境下的相关配置文件
Easter79 Easter79
3年前
SpringCloud 启动时报No active profile set, falling back to default profiles default
这在Spring程序启动时没有找到默认的配置文件所引发的错误,默认文件application.yml如下图: !这里写图片描述(https://oscimg.oschina.net/oscnet/4a822ce35ff8ed227a2c57f496787d95e5a.png)一般在项目中都会有多个,如有正式环境、测试环境等。如下
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这