Создание свойств, специфичных для профиля загрузки Spring, с использованием конфигурации Maven

Как создать файл войны для конкретной среды для приложения с весенней загрузкой с помощью maven. Я создал 3 файла конфигурации профиля, помещенных в папку src / main / resource /.

  1. application.prod.properties
  2. application.dev.properties
  3. application.test.properties

Я могу запустить приложение, указав требуемый тип профиля на вкладке аргументов виртуальной машины со значением «-Dspring.profiles.active = dev» при выполнении проекта в качестве приложения весенней загрузки.

Здесь, когда я работаю как приложение для весенней загрузки, я могу указать требуемый профиль. Точно так же, когда мне нужно использовать для установки MAVEN с другим профилем. Есть ли способ указать профиль как часть списка аргументов виртуальной машины в цели «Выполнить конфигурацию для установки Maven».

У меня есть ограничение не касаться существующего кода Java.

Я использую STS IDE, версию Spring boot 1.5.2.RELEASE, Java 1.8 и oracle db.

Таким же образом помогите мне настроить профили в Jenkins.

Конфигурация моего профиля имеет два требования.

  1. Запустите приложение в STS IDE как приложение весенней загрузки с аргументами виртуальной машины. Использовал приведенную ниже виртуальную машину ARGS -Dspring.profiles.active=dev

Цитата

(Здесь я получаю исключение при запуске SpringBootApp локально в среде разработки).


ПРИЛОЖЕНИЕ НЕ ЗАПУСКАЕТСЯ


Описание:

Невозможно определить класс драйвера встроенной базы данных для типа базы данных NONE

Действие:

Если вам нужна встроенная база данных, укажите поддерживаемую в пути к классам. Если у вас есть настройки базы данных для загрузки из определенного профиля, вам может потребоваться активировать его (профили «dev» в настоящее время активны).

Цитата

  1. Как сделать то же самое с помощью maven install, динамически указывая профили для создания файла войны. Я не могу найти решение.

person Sreenivas M    schedule 17.08.2018    source источник
comment
Я не совсем понимаю ... вы просите активировать определенный профиль maven с помощью аргументов cmd (точно так же, как вы делаете для профилей spring с -Dspring.profiles.active = prod)?   -  person Martín Zaragoza    schedule 17.08.2018
comment
Вся цель профилей Spring - иметь единый файл war / jar для всех сред. Я думаю, что это не поможет, если вы создадите разные файлы war / jar для каждой среды. Можете ли вы уточнить, почему вам нужны разные войны / банки для разных сред?   -  person Kedar Joshi    schedule 17.08.2018
comment
на самом деле мне нужно динамически подбирать файл среды, который выполняет установку maven. Мне не нужны файлы diff war. Требуемый профиль не следует настраивать в pom.xml. Мне нужно избегать внесения изменений в pom.xml для diff env.   -  person Sreenivas M    schedule 17.08.2018
comment
Мне не нужно несколько файлов войны. Здесь требуется, чтобы после того, как код был готов к развертыванию, мне нужно загрузить конфигурацию с помощью аргументов командной строки. Или любой другой способ избежать предупреждения конфигурации в файле свойств.   -  person Sreenivas M    schedule 24.08.2018


Ответы (2)


В вашем основном файле application.properties установите spring.profiles.active на @myActiveProfile@ (или любое другое имя по вашему желанию)

spring.profiles.active=@myActiveProfile@

Добавьте файл application.properties в качестве отфильтрованного ресурса, чтобы заполнитель myActiveProfile был заменен на этапе сборки.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    …
</build>

Добавьте раздел профилей в свой pom.xml

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <myActiveProfile>dev</myActiveProfile>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <myActiveProfile>prod</myActiveProfile>
        </properties>
    </profile>
</profiles>

По сути, вы можете указать профили maven при выполнении конкретной цели. Например, mvn install -P profileName. В профиле вы можете создать свойство, которое можно передать из командной строки при выполнении такой цели, как mvn install -DmyActiveProfile=foo

Надеюсь это поможет.

Полезные ссылки

Как установить активные профили Spring с профилями maven https://maven.apache.org/guides/introduction/introduction-to-profiles.html

person Bankole Hussein Salako    schedule 17.08.2018
comment
Да, эта конфигурация работает. Мое требование - diff. Я не должен снова прикасаться к pom-файлу, чтобы установить профиль diff. Я хочу динамически передавать профиль при создании файла войны с помощью maven. Как и при запуске приложения весенней загрузки, я указываю тип профиля динамически как часть аргументов виртуальной машины. - person Sreenivas M; 17.08.2018
comment
О, да. Вам больше не нужно трогать pom.xml :-). Я обновил свой ответ, чтобы показать, как вы можете предварительно определить все профили один раз в pom.xml. Затем вы можете выполнить свою цель maven следующим образом mvn install -DmyActiveProfile=dev или mvn install -DmyActiveProfile=prod - person Bankole Hussein Salako; 17.08.2018
comment
Вам не нужно добавлять слушателей AFAIK - person Bankole Hussein Salako; 20.08.2018
comment
Мое приложение уже в разработке. Требуется минимальное программирование на Java. - person Sreenivas M; 21.08.2018

Здесь, прежде всего, я бы предложил переименовать ваши файлы свойств в application-prod.properties, application-dev.properties и application-test.properties.

Во-вторых, цель установки maven - скомпилировать и собрать ваш проект.

Если вы также хотите запустить свое приложение, при установке я предлагаю использовать spring-boot-maven-plugin.

И вы можете использовать команду maven примерно так, как показано ниже

mvn clean install spring-boot:run

Некоторые ссылки ниже для вашей информации

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-running-your-application.html

https://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html

person Anil Bachola    schedule 17.08.2018