优雅实现pom依赖-jar打包名称-yml配置,根据环境动态一站式切换

好几天都想写博客来着,但是懒啊,而且自己也没有什么必须要阐述的问题

今天下班闲来无事,凑巧看见一个技术群里有个朋友在提问,我嘴里的这个朋友可真不是我自己

出于对技术的研究(装逼心理盛行)

在吃完饭之余,手痒难耐,渴望打架...

实现了一下,于是便有了本片水文

首先说结论,可以实现(那不是废话,不可以实现我就不写了)

但是并不是基于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包如下

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

java-徐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值