[Java, Spring Boot, Maven] Привязка параметров yaml-файла к Java-объекту с разделением на профили.

КОНТЕКСТ

  • Java
  • Spring Boot
  • Maven

ЦЕЛЬ

Создать Java-объект и привязать к нему параметры из конфигурационного yaml-файла так, чтобы параметры зависели от выбранного профиля.

Инструкция

Чтобы внедрить профили в Ваш проект, нужно добавить следующий блок в pom.xml:

        ...
    </properties>

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profile>dev</profile>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profile>prod</profile>
            </properties>
        </profile>
    </profiles>

    <dependencies>
        ...

Обратите внимание - в блоке properties мы определили переменную profile.

Теперь в файле application.yml мы сможем на нее сослаться таким образом:

application.yml
...
spring:
  profiles:
    active: @profile@

Таким образом мы привязали maven-профили к спрингу.

После этого можно создать два конфигурационных файла:

  • application-dev.yml

  • application-prod.yml

В этих файлах мы можем определить любые собственные параметры

Например,

application-dev.yml
...

personal:
  data:
    firstname: Alex Dev
    lastname: Kuzmin
application-prod.yml
...

personal:
  data:
    firstname: Alex Prod
    lastname: Kuzmin

Непосредственно привязка этих параметров к полям объекта выполняется очень просто - с помощью анотации @Value:

@Component
public class SomeBean {

    @Value("${personal.data.firstname}")
    private String firstName;

    @Value("${personal.data.lastname}")
    private String lastName;
}

Готово! Для переключения профилей собираем проект с ключом -P, например:

mvn clean install -Pprod

Либо в IntelliJ выбираем нужный профиль на панели справа и запускаем по очереди

  • clean
  • install

profiles.jpg

В зависимости от выбранного профиля в переменные будут подтянуты нужные значения.