В процессе разработки часто используется несколько сред, таких как среда разработки, тестовая среда, производственная среда и так далее. Если конфигурационный файл записывается в файл и вручную переключается в разных средах, это, несомненно, громоздко и неумно
Конфигурация с несколькими средами для проектов Maven
3 основных момента:
- Создайте основной файл конфигурации, который содержит необходимые элементы конфигурации, но значения свойств
${xxx}
формальное письмо - Создавайте файлы значений для разных сред, которые содержат определенные значения, которые необходимо динамически загружать в основной файл конфигурации.
- Настроить профиль в pom.xml
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>
Можно обнаружить, что файл pom Spring Boot не требует настройки.build
теги просто работают, дружелюбнее, чем обычные проекты Maven