dev、test、uat、sit、prod多环境,IDEA动态打Jar/War包的几种方式以及静态资源渲染不生效问题解决

背景

实际软件开发工作中,软件会经历dev、test、uat、sit、prod多个环境的部署、测试运行,我们往往需要根据不同的环境配置设置打包属性。SpringBoot项目虽然可以通过spring.profile.active即可动态切换比较简单,但是对于pom.xml动态配置打jar/war包不好配置,本文将介绍几种方式供大家参考。同时由于网上只有在idea中如何进行配置使用,但是没有idea配置运行profile失效的问题解决的教程,于是我便根据我实际遇到的问题将解决方案分享给大家。

Spring Boot

项目结构如图:
在这里插入图片描述

配置属性

application.properties中配置要激活的具体环境配置文件

# 这里test对应application-test.properties文件,可以切换成自己想使用的配置文件
spring.profiles.active=test

运行应用

在这里插入图片描述
可以看到这里提示我们激活的是application-test.properties

Maven

通过这种方式可以动态配置SpringBoot项目在不同环境的配置,但是当我们想要在不同环境通过上面的方式动态选择打jar/war包时就不太方便了,因此接下来介绍通过maven动态配置profile实现动态切换打包的配置信息

配置pom.xml

1、project>>build>>plugins下添加maven-resources-plugin

<build>
	<plugins>
	    <plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-resources-plugin</artifactId>
	    </plugin>
	</plugins>
</build>

2、project>>build下添加resources配置静态资源,这一步主要筛选需要进行属性渲染的配置文件

<build>
	<resources>
	    <resource>
	        <directory>src/main/java</directory>
	        <includes>
	            <include>**/*.properties</include>
	            <include>**/*.xml</include>
	        </includes>
	        <filtering>true</filtering>
	    </resource>
	    <resource>
	        <directory>src/main/resources</directory>
	        <!-- 设置resourecs下的properties进行属性渲染再copy到target目录 -->
	        <filtering>true</filtering>
	        <includes>
	            <include>application-${profile.active}.yml</include>
	            <include>application.yml</include>
	        </includes>
	    </resource>
	    <resource>
	        <directory>src/main/resources</directory>
	        <!-- 将resources目录下其他静态资源copy到target目录但是不进行属性渲染 -->
	        <filtering>false</filtering>
	        <excludes>
	            <exclude>application-${profile.active}.yml</exclude>
	            <exclude>application.yml</exclude>
	        </excludes>
	    </resource>
	</resources>
</build>

3、project下添加profiles

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
            	<!-- 自己定义的属性名,用于后续配置打包方式 -->
                <profile.packaging>jar</profile.packaging>
                <!-- 自己定义的属性名,用于配置springboot激活的配置文件 -->
                <profile.active>dev</profile.active>
            </properties>
            <!-- 默认激活当前配置 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profile.packaging>jar</profile.packaging>
                <profile.active>test</profile.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profile.packaging>war</profile.packaging>
                <profile.active>prod</profile.active>
            </properties>
        </profile>
		<!-- uat、sit省略 -->
    </profiles>

4、project下配置打包方式

<!-- 这里是profile中自定义的属性 -->
<packaging>${profile.packaging}</packaging>

配置applicaiont.properties

# 默认@xxx@或者${xxx},可以修改maven-resources-plugin分割符
spring.profiles.active=@profile.active@

通过这种方式就配置好了多环境的打包方式与激活的配置文件

使用方式

命令行

通过命令行打包配置激活profile,下面给出使用prod配置文件的例子

mvn package -P prod

IDEA

通过idea界面可以指定使用的profile
在这里插入图片描述
然后在界面进行打包
在这里插入图片描述

遇到的问题

切换profile后idea配置无法正常使用

在这里插入图片描述
通过前面提到的方式打包之后再次运行idea的运行配置之后会发现静态资源没有得到渲染
在这里插入图片描述
这里我查了一下大概原因是因为idea的配置在运行时会执行build步骤,该步骤会检查编译生成的target目录下的文件,主要依据是classes文件夹内容是否有变化,如果没有就不进行重新编译。在这个过程中可能会导致maven-resource-plugin功能失效导致静态资源没有copy成功。

一种解决方式是修改ieda配置,打开编辑配置界面,选中add before launch task,在程序运行之前定制化我们的构建流程。
在这里插入图片描述
点击+号选择要添加的任务类型
在这里插入图片描述
配置如下:
在这里插入图片描述
在这里插入图片描述
运行成功,这样就不用担心切换profile之后静态资源不生效了

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值