Конфигурация Maven с несколькими средами

maven

В процессе разработки часто используется несколько сред, таких как среда разработки, тестовая среда, производственная среда и так далее. Если конфигурационный файл записывается в файл и вручную переключается в разных средах, это, несомненно, громоздко и неумно

Конфигурация с несколькими средами для проектов Maven

3 основных момента:

  1. Создайте основной файл конфигурации, который содержит необходимые элементы конфигурации, но значения свойств${xxx}формальное письмо
  2. Создавайте файлы значений для разных сред, которые содержат определенные значения, которые необходимо динамически загружать в основной файл конфигурации.
  3. Настроить профиль в pom.xml

1. Основной файл конфигурации

Только для демонстрационных целейsrc/main/resourcesСоздайте каталог с именемapplication.propertiesфайл конфигурации, как показано ниже:

application.name=${application.name}

2. Различные файлы значений среды

существуетsrc/mainсоздать каталогpropertiesпапка и вpropertiesСоздал отдельно в папкеapplication-dev.properties,application-prod.properties, подробности следующим образом:

  1. application-dev.properties
application.name=application-dev
  1. 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>

демо

  1. прямое исполнениеmvn clean package -Dmaven.test.skip=true, упакованныйapplication.propertiesСодержание следующее:

    application.name=application-dev
    

    Обратите внимание, что не указаноprofile, но мы устанавливаем среду по умолчанию наdev,такapplication-dev.propertiesЗначение введеноapplication.propertiesвнутри

  2. воплощать в жизньmvn clean package -Pproduct -Dmaven.test.skip=true, упакованныйapplication.propertiesСодержание следующее:

    application.name=application-prod
    

    Уведомление-Pназначенныйprofileдаpom.xmlнастроен вprofile id, вместо меткиenvсоответствующее значение

  3. если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