Maven多环境配置
在开发过程中往往会有多种环境,如开发环境、测试环境、生产环境等等。如果将配置文件写在一个文件里,在不同环境时手动切换,这无疑是繁琐的,也是不智能的
Maven 工程的多环境配置
3个核心点:
- 创建主配置文件,里面是需要的配置项,不过属性值采用
${xxx}
形式书写 - 创建不同环境的值文件,里面是需要动态加载到主配置文件的具体值
- 在 pom.xml 中配置 profile
1.主配置文件
为便于演示,这里只在 src/main/resources
目录下创建一个名为 application.properties
的配置文件,具体如下:
application.name=${application.name}复制代码
2.不同环境值文件
在 src/main
目录下创建一个 properties
文件夹,并在 properties
文件夹下分别创建 application-dev.properties
,application-prod.properties
,具体如下:
- application-dev.properties
application.name=application-dev复制代码
- application-prod.properties
application.name=application-prod复制代码
3.pom 文件
<build><filters>
<!-- 这里的文件名必须与多环境配置文件的文件名相同, ${env} 会动态获取不同环境 -->
<!-- 假如激活 dev 环境, 这时对应的文件就是 src/main/properties/application-dev.properties -->
<filter>src/main/properties/application-${env}.properties</filter>
</filters>
<resources>
<resource>
<!-- 可以理解为真正的配置文件所在的目录 -->
<directory>src/main/resources</directory>
<!-- 是否替换资源中的属性, 设置为 true 才能实现动态替换 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<!-- 环境一 -->
<profile>
<!-- 使用 mvn package 打包时, -P 指定 profile 的输入值就是此 id -->
<!-- id 可以随便命名, 不能重复, 可以与 env 相同, 这里演示特意与 env 不同 -->
<id>develop</id>
<properties>
<!-- env 必须与文件的后缀一致(application-${env}.properties) -->
<!-- 其中 env 这个标签也可以自定义, 没有强制要求必须是 env,
但必须与上面 application-${env}.properties 的 ${} 里的值一致 -->
<env>dev</env>
</properties>
<!-- 不指定环境则默认 dev 环境, 可以放在任一个环境下, 但不能在多个环境中指定 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 环境二 -->
<profile>
<id>product</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
复制代码
演示
直接执行
mvn clean package -Dmaven.test.skip=true
,此时打包后的application.properties
内容如下:application.name=application-dev
复制代码
注意这里并没有指定
profile
,但我们设置了默认环境为dev
,所以application-dev.properties
的值就打进了application.properties
里执行
mvn clean package -Pproduct -Dmaven.test.skip=true
,此时打包后的application.properties
内容如下:application.name=application-prod
复制代码
注意
-P
指定的profile
是pom.xml
里配置的profile id
,而不是标签env
对应的值如果将
build:resources:resource:filtering
标签注释掉,或者设置为false
,此时打包后的application.properties
内容如下:application.name=${application.name}
复制代码
所以如果要通过
profile
动态加载配置文件,build:resources:resource:filtering
标签一定要设置为true
Spring Boot 的多环境配置
相比与普通 Maven 工程,Spring Boot 多环境配置更快捷
1.主配置文件
在 src/main/resources
目录下创建 application.properties
或 application.yml
,这里创建 application.yml
,内容如下:
spring: profiles:
active:@profileActive@
复制代码
2.不同环境值文件
在 src/main/resources
目录下创建 application-dev.yml
,内容如下:
server: port:8088
复制代码
在 src/main/resources
目录下创建 application-prod.yml
,内容如下:
server: port:8099
复制代码
3.pom 文件
<profiles><profile>
<!-- profile id, 打包时指定使用 -->
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<!-- 默认激活 dev 环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
复制代码
可以发现 Spring Boot 的 pom 文件不需要配置 build
标签就可以工作,比普通 Maven 工程更友好
1. yaml 替换 @@ 包裹的文本,
2 ${url} 替换
以上是 Maven多环境配置 的全部内容, 来源链接: utcz.com/z/517474.html