Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式
写在前面
最近由于项目要求,原先的项目只有开发环境的项目配置,后来不利于线上测试,于是,最近对于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这两个文件在启动服务时,服务器不会自动加载,那么在不同的环境中时怎么调用不同的文件的呢?
主要有以下两种方式:
方式一:通过修改配置文件 application.yml中Spring.profile.active的值,来指定加载的配置,
也就是说,如果Spring.proflie.active=dev,则在启动服务之后,服务器就会加载application-dev.yml,若值为test或者prod,修改方式一致。
下面上图说明:
方式二:使用命令启动服务,命令中带参数方式(此方式可以没有application.yml文件)
具体操作步骤如下:
1> 进入到项目目录下,先用mvn install命令对项目进行打包,执行完此步骤后,会在项目对应的target目录下生成该项目对应的jar包
2> 进入target目录,执行命令:java -jar 生成的jar包 --spring.profiles.active=prod
通过此命令之后,项目就会调用application-prod.yml配置文件,即以生产环境的配置要求启动服务。同理,若是开发环境,只需将prod改为dev即可。
方式三:此种方式是根据方式一延伸出的,更为灵活
具体步骤如下:
1> application.yml中将spring.profiles.active的值改成spring.profiles.active=@activatedProperties@,这里的@activatedProperties@是一个变量对应pom文件里的环境配置。
下面为pom文件的配置:
<profiles> <profile> <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>
注意:<activatedProperties>dev</activatedProperties>中的dev与配置文件名称application-dev.yml要一致
activatedProperties名称对应application.properties配置文件中的spring.profiles.active=@activatedProperties@
当maven打包时会用pom文件里<activatedProperties>dev</activatedProperties>中的值替换掉application.properties配置文件中的@activatedProperties@
2> 执行Maven打包命令mvn clean package,观察控制台日志
已经构建成功,刷新一下项目,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等只是演示案例中名字,并非所有项目都是如此,还请各位以实际项目为主。
原文地址:https://www.cnblogs.com/cndarren/p/11751311.html
- OpenCV和SVM分类器在自动驾驶中的车辆检测
- 自动驾驶的模型预测控制
- 【专业技术】使用html5的十大原因
- 第五课:推理结果的可视化
- 第四课:模型的使用
- 【Java概念学习】--数组的初始化
- linux下重命名文件或文件夹使用mv既可实现。
- 第三课:把tensorflow,模型和测试数据导入Android工程
- D-Link 路由器信息泄露和远程命令执行漏洞分析及全球数据分析报告
- Wordpress安全架构分析
- CVE-2017-5123 漏洞利用全攻略
- 简单分析shared pool(三) (r5笔记第94天)
- OpenCV在车道线查找中的使用
- ESP32 DevKitC 编译烧写 AliOS Things
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释