it-swarm.com.ru

Настроить активный профиль в Spring Boot через Maven

Я пытаюсь установить активный профиль в приложении Spring Boot, используя Maven 3.
В моем pom.xml я устанавливаю активный профиль по умолчанию и свойство spring.profiles.active to development :

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <spring.profiles.active>development</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

но каждый раз, когда я запускаю свое приложение, я получаю следующее сообщение в журналах:

No active profile set, falling back to default profiles: default

и профиль SpringBoot установлен по умолчанию (читает application.properties вместо application-development.properties)

Что еще нужно сделать, чтобы мой активный профиль SpringBoot был настроен с использованием профиля Maven?
Любая помощь высоко ценится.

15
Michał Szewczyk

Профиль Maven и профиль Spring - это две совершенно разные вещи. Ваш pom.xml определяет переменную spring.profiles.active, которая доступна в процессе сборки, но не во время выполнения. Именно поэтому активирован только профиль по умолчанию.

Как связать профиль Maven с Spring?

Вам нужно передать переменную сборки в ваше приложение, чтобы оно было доступно при запуске.

  1. Определите местозаполнитель в вашем application.properties:

    [email protected]@
    

    Переменная @[email protected] должна соответствовать объявленному свойству из профиля Maven.

  2. Включите фильтрацию ресурсов в вашем pom.xml:

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

    Когда сборка будет выполнена, все файлы в каталоге src/main/resources будут обработаны Maven, а заполнитель в вашем application.properties будет заменен переменной, определенной в вашем профиле Maven. 

Для более подробной информации вы можете перейти к моему сообщению где я описал этот вариант использования.

33
Daniel Olszewski

Вы можете запустить с помощью следующей команды. Здесь я хочу запустить с использованием весеннего профиля local:

spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"

6
Justin Joseph

Вы должны использовать Spring Boot Maven Plugin :

<project>  
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.1.RELEASE</version>
        <configuration>
          <profiles>
            <profile>foo</profile>
            <profile>bar</profile>
          </profiles>
        </configuration>
        ...
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
4
SaWo

Или довольно легко:

mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
3
Thomas Escolan

В процессе разработки активировать профиль Spring Boot, когда активирован определенный профиль Maven, просто. Вы должны использовать свойство profiles из spring-boot-maven-plugin в профиле Maven, например:

<project>
    <...>
    <profiles>
        <profile>
            <id>development</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <profiles>
                                <profile>development</profile>
                            </profiles>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    <profiles>
    </...>
</project>

Вы можете запустить следующую команду, чтобы использовать и Spring Boot, и профиль Maven development:

mvn spring-boot:run -Pdevelopment

Если вы хотите иметь возможность сопоставить любые профили Spring Boot с профилем Maven с тем же именем профиля, вы можете определить один профиль Maven и включить его при обнаружении наличия свойства Maven. Это свойство будет единственным, что вам нужно указать при запуске команды mvn.
Профиль будет выглядеть так:

    <profile>
        <id>spring-profile-active</id>
        <activation>
            <property>
                <name>my.active.spring.profiles</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <profiles>
                            <profile>${my.active.spring.profiles}</profile>
                        </profiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

И вы можете запустить следующую команду, чтобы использовать и Spring Boot, и профиль Maven development:

mvn spring-boot:run -Dmy.active.spring.profiles=development

или же :

mvn spring-boot:run -Dmy.active.spring.profiles=integration

или же :

 mvn spring-boot:run -Dmy.active.spring.profiles=production

И так для ...

Такая конфигурация имеет смысл, так как в общем профиле Maven вы полагаетесь на свойство my.active.spring.profiles, которое передается для выполнения некоторых задач или для оценки некоторых вещей.
Например, я использую этот способ для настройки общего профиля Maven, который упаковывает приложение и создает образ докера, специфичный для выбранной среды. 

2
davidxxx

Существует несколько способов настройки профилей для приложения Springboot.

  1. Вы можете добавить это в свой файл свойств: 

    spring.profiles.active=dev
    
  2. Программный способ: 

    SpringApplication.setAdditionalProfiles("dev");
    
  3. Тесты позволяют легко определить, какие профили активны 

    @ActiveProfiles("dev")
    
  4. В среде Unix

    export spring_profiles_active=dev
    
  5. Системный параметр JVM

    -Dspring.profiles.active=dev
    
0
Pankaj Jaiswal