Пружинный загрузочный профиль на основе WAR с использованием Maven - PullRequest
0 голосов
/ 14 января 2019

Мне нужно создать файл WAR на основе файла свойств конкретной среды.

Итак, я создал 2 файла свойств,

  • application.DEV.properties

  • application.PROD.properties

Теперь, когда я запускаю проект с использованием встроенного в eclipse tomcat, я передаю -Dspring.profiles.active=DEV в качестве аргумента VM. Затем, когда я достигаю своей конечной точки, я вижу возвращенные сообщения, связанные с DEV. То же самое происходит, когда я передаю PROD в качестве параметра.

Теперь я хочу создать файл WAR с помощью команды maven и передать параметр таким образом, чтобы загружался мой конкретный файл свойств. Поэтому я сослался на Google, а также на stackoverflow и нашел различные варианты, как показано ниже,

  1. mvn clean install -Drun.profiles = DEV
  2. mvn clean install -Drun.jvmArguments = "- Dspring.profiles.active = DEV"
  3. mvn clean install -Dspring.profiles.active = "DEV"
  4. mvn clean install -Dspring.profiles.active = DEV

Я попробовал все выше. Когда я нажимаю на команду, создается WAR. но он не развертывается на tomcat, потому что он не может прочитать файл свойств и выдает ошибку. Похоже, что файл свойств профиля не загружается в WAR.

Я хочу знать, что является альтернативой -Dspring.profiles.active=DEV, когда я хочу сгенерировать файл WAR, используя maven?

Как сгенерировать WAR-файл, чтобы правильно включить файл свойств конкретного профиля?

Я использую пружинную загрузку 1.5.14. ВЫПУСК.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Вы должны передать spring.profiles.active среде выполнения, а не "среде выполнения сборки". Единственные пружинные профили, которые желательны во время сборки, были бы для целей тестирования.

В случае «войны с Tomcat» вы можете установить spring.profiles.active:

  1. (глобально) Создайте файл в <tomcat_home>/bin/ с именем setnev.sh (соответственно .bat, когда вы находитесь на компьютере с Windows) с помощью:

    export JAVA_OPTS="-Dspring.profiles.active=PROFILE_OF_THIS_TOMCAT"
    

    соответственно:

    set JAVA_OPTS="-Dspring.profiles.active=PROFILE_OF_THIS_TOMCAT"
    
  2. (глобально) Добавить строку к <tomcat_home>/conf/catalina.properties:

    spring.profiles.active=PROFILE_OF_THIS_TOMCAT
    
  3. (на уровне контейнера) Добавьте файл с именем context.xml в $CATALINA_BASE/conf/[enginename]/[hostname]/ (вы также можете поместить его в /<webapp_root>/META-INF/, но тогда вам придется различать во время сборки) со следующим содержимым :

    <Context>
     <Environment name="spring.profiles.active" value="PROFILE_OF_THIS_TOMCAT" /> 
    </Context>
    
0 голосов
/ 14 января 2019

Как прокомментировал этот ответ Микаэль, вы можете получить справку из документации maven о том, как использовать профили: https://maven.apache.org/guides/introduction/introduction-to-profiles.html

Обычный способ выбрать профиль с Maven -

mvn -Pprod package

Где prod - это имя вашего профиля. Если вы хотите построить с профилем разработчика, это будет

mvn -Pdev package

Такие профили определены в вашем файле pom.xml в project>profiles>profile. И в этом месте вы можете указать варианты упаковки.

Вот такой профиль:

<profile>
    <id>dev</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <!-- log configuration -->
        <logback.loglevel>DEBUG</logback.loglevel>
        <!-- default Spring profiles -->
        <spring.profiles.active>dev${profile.no-liquibase}</spring.profiles.active>
    </properties>
</profile>
...