Разные .env файлы в зависимости от выбранного окружения

Рейтинг: 1Ответов: 1Опубликовано: 21.01.2023

Всем привет. Я новичек в spring и kotlin, до этого писал на nest js + ts. Пытаюсь освоить работу с переменными окружения и, в целом, уже использую их в application.yaml но хочу сделать возможным подключение разных файлов .env, например: .env.dev, .env.prod в зависимости от каких-нибудь параметров при запуске проекта. Например, как при запуске проекта мы можем использовать параметр SPRING_PROFILES_ACTIVE=dev/prod и в зависимости от этого использовать разные yaml файлы: application-dev/prod.yaml

Файл конфигурации запуска проекта .run/MyCareerApiApplication.run.xml

<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="MyCareerApiApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
    <option name="ACTIVE_PROFILES" />
    <module name="my_career_api.main" />
    <option name="SPRING_BOOT_MAIN_CLASS" value="ru.my_career.my..." />
    <extension name="net.ashald.envfile">
      <option name="IS_ENABLED" value="true" />
      <option name="IS_SUBST" value="false" />
      <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
      <option name="IS_IGNORE_MISSING_FILES" value="false" />
      <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
      <ENTRIES>
        <ENTRY IS_ENABLED="true" PARSER="runconfig" IS_EXECUTABLE="false" />
        <ENTRY IS_ENABLED="true" PARSER="env" IS_EXECUTABLE="false" PATH="src/main/resources/.env.dev" />
      </ENTRIES>
    </extension>
    <method v="2">
      <option name="Make" enabled="true" />
    </method>
  </configuration>
</component>

Ответы

▲ 0

В один yml файл расписываешь несколько профилей.

myconfig:
  name: default-name
---
spring:
  config:
    activate:
      on-profile: dev

myconfig:
  name: dev-name
---
spring:
  config:
    activate:
      on-profile: prod

myconfig:
  name: prod-name

При запуске проекта указываешь нужный профиль, и у тебя подтянется то значени которое в этом профиле указано. В классе:

// Здесь будет разное имя в зависимости от профиля
@Value(value = "${myconfig.name}")
private String name;

Почитать: Spring YAML, Spting Profiles