好几天都想写博客来着,但是懒啊,而且自己也没有什么必须要阐述的问题
今天下班闲来无事,凑巧看见一个技术群里有个朋友在提问,我嘴里的这个朋友可真不是我自己
出于对技术的研究(装逼心理盛行)
在吃完饭之余,手痒难耐,渴望打架...
实现了一下,于是便有了本片水文
首先说结论,可以实现(那不是废话,不可以实现我就不写了)
但是并不是基于yml文件来实现,而是基于pom文件来实现!
由于pom文件的引用表达式的引用范围限制,使得pom文件想要引用yml文件中的配置成为一个很艰难的问题.
但是!但是但是但是!
yml引用表达式是可以引用pom文件的
具体实现过程如下
第一步,引入profiles标签,并在该标签内自定义环境切换的内容
profiles标签下每个profile就像一个子按钮事件,选择了test,就触发test,选择了prod,就触发prod
正是基于这个标签,我们可以自由切换各种属性,设置以及依赖
<profiles>
<!-- 假定此处是测试环境 -->
<profile>
<!-- 设置唯一标识 -->
<id>test</id>
<!-- 设置默认激活 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<!-- 添加自定义属性值 -->
<properties>
<servername>test</servername>
</properties>
<!-- 添加测试环境独有依赖,此处以lombok为例子 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</profile>
<!-- 假定此处是正式环境环境 -->
<profile>
<!-- 不是吧,你还真等着看注释啊,照着测试环境看看得了... -->
<id>prod</id>
<properties>
<servername>prod</servername>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
依赖方面,我此处的依赖以lombok举例,实际上可以自由定义,
在properties标签中,子标签都是随意自定义的,我以servername标签举例,用于声明一个自定义属性值,可以理解为建立了一个map,key我设置成了servername,值为prod
上面自己需要的设置完成后,刷新maven,就会发现maven控制栏多了一些设置,这就是你自定义的切换按钮.
接下来需要到动态jar包了
maven的打包是可以通过bulid标签设置的,在这里我使用${},引用上面profiles标签自定义的变量,从而实现打包名称的动态变更
<build>
<!-- 自定义jar包名称 -->
<finalName>${servername}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
接下来是最后一步,yml文件自动切换配置,根据profiles中的active属性,去切换来读取不同子配置文件的内容
配置文件形式如下:
请务必注意,子级配置文件的命名都是以application-起始
以自己pom中配置的servername链接
主yml文件如下:
基于@@读取方式,让他读取servername中的内容,从而匹配到对应的子配置文件上
spring:
profiles:
active: @servername@
-prod.yml如下
myConfig:
urls:
testa: aaaaaa.com
testb: bbbbbb.com
-test.yml如下
myConfig:
urls:
testc: ccccc.com
testd: ddddd.com
大功告成!
后续在进行切换的时候,只需要切换环境的选择,并且刷新一下pom文件,就可以实现动态切换了
如果有帮到你的地方,可以点赞或者回复支持一下作者,感激不尽!!!!!!!!!!!!!!!!!!!!!!.
例子我就不放了,想必各位也和我一样看文章不看成功案例
例子在下面
切换如下
yml扫描结果如下
jar包如下