В моем проекте у меня есть отдельные файлы application.yml для каждой среды, внутри каждой папки для среды.
ПРИМЕЧАНИЕ. Файл yml красного цвета создан временно, чтобы код работал. Но следует удалить это после исправления. Итак, я хочу использовать отдельный файл application.yml в зависимости от среды. Специально мне нужно использовать local/application.yml для локальной разработки
Ниже приведен пример получения переменных env в моем проекте.
@Component
@Configuration
public class ApplicationProperties {
@Value("${ex.my.url}")
private String myServiceUrl;
// getters setters and nedded stuff
}
Но это не работает, так как не удалось найти способ упомянуть нужную среду. Потому что он в отдельной папке. Во всех других примерах упоминается способ получить файл yml внутри папки ресурсов без отдельных папок.
Любое решение проблемы?




в своих проектах я указываю профиль с опцией VM: -Dspring.profiles.active=локальный
Затем у меня есть файл с именем application-local.yml
в производстве : -Dspring.profiles.active=prod будет использовать файл application-prod.yml
Есть ли причина, по которой вы не можете переименовать файлы?
Да. Также переименование не будет работать, если все эти файлы не будут помещены только в папку ресурсов. Не так ли?
Ну, в моем проекте файлы application-*.yml лежат в resources/config, так что думаю должно работать. edit: nvm кажется, конфигурация - это особый случай
Я не понял. Можете ли вы объяснить, как вы получаете доступ к yml внутри папки конфигурации.
В папке ресурсов
Сделайте файл application.yml, application-local.yml, application-dev.yml и т. д., что хотите
а потом в application.yml
spring.profile.active = ${ENV}
теперь во время запуска укажите переменные ENV из конфигурации запуска/отладки в Intellij или укажите профиль, для которого вы хотите создать банку, в application.yml.
В качестве альтернативы вы можете использовать -D spring.profile.active=dev
Я хочу сохранить эту структуру папок. Вместо того, чтобы помещать все файлы application.yml в каталог ресурсов.
сначала из документация:
SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:
- A /config subdirectory of the current directory
- The current directory
- A classpath /config package
- The classpath root
Итак, с переданной иерархией каталогов у вас будут проблемы.
во-вторых, для спецификации файла вы можете использовать Профили. Это работает следующим образом:
application.propertiesapplication-<name>.propertiesТаким образом, если вы укажете профили dev и cool, будут использоваться свойства application.properties, application-dev.properties, `application-cool.properties.
Обновлено:
Вы можете передать spring.config.location для указания пути к файлу свойств, но если вы хотите, чтобы иерархия каталогов была такой же, как у вас, вам нужны некоторые настройки с использованием context.initializers.classes и ApplicationContextInitializer.
Классическое решение — настроить один конфигурационный файл. (Я предпочитаю свойства, потому что я в здравом уме) и разрешить размещение файла переопределений на каждом установленном хосте.
Spring поддерживает это из коробки.
Вот пример:
public static void main(final String[] argumentArray)
{
final StringApplicationBuilder springApplicationBuilder;
springApplicationBuilder = new SpringApplicationBuilder(YourSpringBootApplication.class)
springApplicationBuilder.properties(
"spring.config.location=classpath:/yourConfig.properties,/some/path/to/overrides/directory/yourConfig.properties");
springApplicationBuilder.build().run(argumentArray);
}
Вот что я нашел из Интернета также. Но в этом случае имя файла не похоже на «application-dev.yml». Это похоже на application.yml, который находится внутри папки dev/. В этом проблема.