Spring & Maven & Profiles
🏷️ Maven
主要是根据这篇博客上的方案进行配置,上面写的很详细,具体用法请看原文。
记一下遇到的问题,主要是由于 profiles.profile.properties 中定义的变量名不同,导致打包时一直没有配置文件。在 <resources>
使用变量(如 /${profileActive}
)时要和在 profiles.profile.properties 中定义的一致。
下面是我在项目中使用的方法,以供参考:
pom.xml
xml
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources/</directory>
<excludes>
<exclude>dev/*</exclude>
<exclude>prod/*</exclude>
<exclude>test/*</exclude>
</excludes>
<includes>
<include>banner.txt</include>
</includes>
</resource>
<resource>
<directory>src/main/resources/${profileActive}</directory>
</resource>
</resources>
</build>
目录接口
application.yml
yaml
spring:
profiles:
active: dev
打包后的文件
打包时使用 -P
指定使用的 profile 。下面的命令是使用 prod 环境的 profile 。
shell
mvn clean package -P prod
在打包的 jar 文件的 \BOOT-INF\classes\
目录下可以看到加载进来的配置文件。
可以看到打包后仅保留了 prod 目录下的配置文件。
参考
关于 Spring Boot 和 Maven 的 profile,这两篇文件介绍的很详细。