序
接触过许多工程,发现有一些基于maven的springboot工程还是使用maven的profile,有些"过时"了,下面简单介绍一下。
示例1
pom.xml
<profiles>
<profile>
<!-- 开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<!-- 正式预生产环境 -->
<id>staging</id>
<properties>
<profiles.active>staging</profiles.active>
</properties>
</profile>
<profile>
<!-- 正式环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<configuration>
<target>1.8</target>
</configuration>
<executions>
<execution>
<id>copy-service-properties</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<copy todir="target/classes/config" overwrite="true">
<fileset dir="${basedir}/src/main/resources/deploy/${profiles.active}">
<include name="*.yml"/>
</fileset>
</copy>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
src/main/resources
├── config
│ ├── application.yml
│ └── bootstrap.yml
├── deploy
│ ├── Dockerfile
│ ├── dev
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── prod
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ ├── staging
│ │ ├── application.yml
│ │ └── bootstrap.yml
│ └── test
│ ├── application.yml
│ └── bootstrap.yml
这种方法呢,感觉是多此一举,用application-{profile}.yml不香吗,感觉是没有用上springboot之前的maven工程的用法
示例2
pom.xml
<profiles>
<profile>
<!-- 开发环境 -->
<id>dev</id>
<properties>
<app.active>dev</app.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<app.active>test</app.active>
</properties>
</profile>
<profile>
<!-- 正式预生产环境 -->
<id>staging</id>
<properties>
<app.active>staging</app.active>
</properties>
</profile>
<profile>
<!-- 正式环境 -->
<id>prod</id>
<properties>
<app.active>prod</app.active>
</properties>
</profile>
</profiles>
application.yml
spring:
profiles:
active: @app.active@
这种用法呢,src/main/resources下面只有一个application.yml,把profile的差异放到了maven的profile中,在application.yml引用maven的profile变量,有点"少见多怪",直接application-{profile}.yml用不香吗。
小结
springboot工程已经提供了profile的特性了,其实大部分场景可以替换掉maven的profile,没必要在使用maven的profile了,不然总感觉显得有点古老和过时。