环球快看:说一个大家都知道的 Spring Boot 小细节!
小伙伴们知道,我们在创建SpringBoot项目的时候,默认都会有一个parent,这个parent中帮我们定了项目的JDK
小伙伴们知道,我们在创建 Spring Boot 项目的时候,默认都会有一个 parent,这个 parent 中帮我们定了项目的 JDK 版本、编码格式、依赖版本、插件版本等各种常见内容,有的小伙伴可能看过 parent 的源码,这个源码里边有这么一个配置:
【资料图】
${basedir}/src/main/resources true **/application*.yml **/application*.yaml **/application*.properties ${basedir}/src/main/resources **/application*.yml **/application*.yaml **/application*.properties
首先小伙伴们知道,这个配置文件的目的主要是为了描述在 maven 打包的时候要不要带上这几个配置文件,但是咋一看,又感觉上面这段配置似乎有点矛盾,松哥来和大家捋一捋就不觉得矛盾了:
先来看第一个 resource,directory 就是项目的 resources 目录,includes 中就是我们三种格式的配置文件,另外还有一个 filtering 属性为 true,这是啥意思呢?这其实是说我们在 maven 的 pom.xml 文件中定义的一些变量,可以在 includes 所列出的配置文件中进行引用,也就是说 includes 中列出来的文件,可以参与到项目的编译中。第二个 resource,没有 filter,并且将这三个文件排除了,意思是项目在打包的过程中,除了这三类文件之外,其余文件直接拷贝到项目中,不会参与项目编译。总结一下就是 resources 下的所有文件都会被打包到项目中,但是列出来的那三类,不仅会被打包进来,还会参与编译。
这下就清晰了,上面这段配置实际上并不矛盾。
那么在 properties 或者 yaml 中,该如何引用 maven 中的变量呢?
这块原本的写法是使用$符号来引用,但是,我们在配置文件中,往往用$符号来引用当前配置文件的另外一个 key,所以,我们在 Spring Boot 的 parent 中,还会看到下面这行配置:
17 @ ${java.version} ${java.version} UTF-8 UTF-8
这里的
松哥举一个简单的例子,假设我想在项目的 yaml 文件中配置当前项目的 Java 版本,那么我就可以像下面这样写:
app: java: version: @java.version@
这里的@java.version@就表示引用了 pom.xml 中定义的 java.version 变量。
现在我们对项目进行编译,编译之后再打开 application.yaml,内容如下:
可以看到,引用的变量已经被替换了。
按照 Spring Boot parent 中默认的配置,application*.yaml、application*.yml 以及 application*.properties 文件中可以引用 pom.xml 中定义的变量,其他文件则不可以。如果其他文件也想引用,就要额外配置一下。
例如,想让 txt 文件引用 pom.xml 中的变量,我们可以在 pom.xml 中做如下配置:
src/main/resources **/*.txt true org.springframework.boot spring-boot-maven-plugin
include 所有的 txt 文件,并且设置 filtering 为 true(不设置默认为 false),然后我们就可以在 resources 目录下的 txt 文件中引用 pom.xml 中的变量了,像下面这样:
编译之后,这本变量引用就会被替换成真正的值:
在 yaml 中引用 pom.xml 的配置,有一个非常经典的用法,就是多环境切换。
假设我们现在项目中有开发环境、测试环境以及生产环境,对应的配置文件分别是:
application-dev.yamlapplication-test.yamlapplication-prod.yaml我们可以在 application.yaml 中指定具体使用哪个配置文件,像下面这样:
spring: profiles: active: dev
这个表示使用开发环境的配置文件。
但是有时候我们的环境信息是配置在 pom.xml 中的,例如 pom.xml 中包含如下内容:
dev dev true prod prod test test
这里配置了三个环境,其中默认是 dev(activeByDefault)。那么我们在 application.yaml 中就可以使用 package.environment 来引用当前环境的名称,而不用硬编码。如下:
spring: profiles: active: @package.environment@
此时,我们通过 maven 命令对项目打包时,就可以指定当前环境的版本了,例如使用 test 环境,打包命令如下:
mvn package -Ptest
打包之后我们去看 application.yaml,就会发现里边的环境已经是 test 了。
如果你使用的是 IDEA,则也可以手动勾选环境之后点击打包按钮,如下:
可以先勾选上面的环境信息,再点击下面的打包。
好啦,一个小小知识点,因为有小伙伴在微信上问这个问题,就拿出来和大家分享下。
关键词:
小伙伴们知道,我们在创建SpringBoot项目的时候,默认都会有一个parent,这个parent中帮我们定了项目的JDK
来源:燃次元(ID:chaintruth)作者:张琳编辑:曹杨曾几何时,在很多女生的心目中,高跟鞋是最好的成人礼
齐鲁晚报·齐鲁壹点记者徐良刘超4月28日上午,2023海峡两岸(德州)中医药交流大会召开,本次活动主题为“
【2023年4月13日,德国慕尼黑讯】追求高效率的高功率应用持续向更高功率密度及成本最佳化发展,也为电动汽
航天南湖5月4日网上申购,申购代码为787552,中签号公布日期为5月8日。该股概况请见下图:
资金流向数据,主力资金净流入659 97万元,占总成交额17%,其中超大单净流入100 77万元,大单净流入55
北京商报讯(记者张天元)4月28日,北京商报记者从北京烹饪协会了解到,经评估论证,由北京胡大餐饮有限公
上海车展上,东风日产也宣布了将坚持纯电、e-POWER、插电混动三线并行的电驱化技术路线,旗下启辰品牌则带
以下是青海春天在北京时间4月28日11:20分盘口异动快照:4月28日11点20分,青海春天盘中涨停,报8 86元,目
2023宁夏初级会计师准考证打印入口由会计职称考试栏目提供,查找更多考试报名资讯、准考证打印、成绩查询或2
百变大侦探百分百人生答卷凶手是谁百分百人生答卷剧本答案真相攻略,百变大侦探百分百人生答卷凶手是哪个,
4月27日,“天才大师达利艺术特展”在贵阳国际时尚发布中心正式开幕,当天吸引了近千人到现场观展。萨尔瓦
1、唱歌者,作者是恩斯特·巴拉赫,材质为青铜雕塑,巴拉赫(1870-1938年)是德国表现主义雕刻家的代表,他的
【原标题】梯次投放运力服务“五一”假期出行国铁南宁局加开或重联动车组94趟◆日均上线116组动车,高峰日
行情回顾:昨晚黑色系弱势回落。热卷跌38元收3743,螺纹钢跌42元收3686,焦炭跌475元收2147,铁矿石跌1元收
4月27日,景顺长城核心竞争力混合A最新单位净值为3 138元,累计净值为4 468元,较前一交易日上涨0 9%。历史
医学科幻大赛描绘“未来医院”
1、1河北建筑工程学院不这么样,其中的建筑专业将来只能到一般工程公司做建筑设计,高一点的设计院或者大型
1、孙守恒,男,中国农工民主党党员,先后毕业于山东大学、中国社会科学院,现任北京蓝秦律师事务所主任律
1、公司起名绝对是个学问,以下问题必须注意。2、给企业或公司命名的几点注意事项:音念起来会不会很顺口、