Как загрузить пользовательский файл application-xxx.yml из другого приложения-xxx.yml при весенней загрузке без использования решения для аннотации профиля - PullRequest
0 голосов
/ 29 января 2020

Я хотел бы загрузить одну application-xxx.yml для производственной среды из трех application-xxx.yml , и это определяется значением переменной среды (в моем дело его) страна .

Объяснение:

У меня развернут микросервис с пружинной загрузкой (REST api) в разных aws регионах для разных стран.

Я добавил 3 различных файла yml / properties в папке ресурсов, например:

для США> application-usa.yml.

для Германии> application-ger.yml .

Для Индии> application-ind.yml.

(Все три файла yml содержат похожие свойства, но имеют разные значения для них)

Так скажем, если env. переменная страна == США , затем файл application-usa.yml должен быть загружен, но не остальные упомянутые файлы application-xxx.yaml и т. д. .....

Таким образом, в конце концов, только один файл yaml из указанных выше 3 должен быть загружен в зависимости от значения переменной env страна

Так как же этого добиться?

Ответы [ 3 ]

0 голосов
/ 29 января 2020

Spring support spring.profiles.active свойство для активации свойств при загрузке приложения. Вам просто нужно передать значение этого свойства при запуске приложения в среде.

Системный параметр JVM

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

-Dspring.profiles.active=usa

Переменная среды

В среде Unix профили также могут быть активируется через переменную окружения:

export spring_profiles_active=usa
0 голосов
/ 29 января 2020

Вы можете выбрать файл application.properties в соответствии с переменной среды или флагом компиляции -D.

Из документации Spring:

Если вам не нравится application.properties в качестве имени файла конфигурации вы можете переключиться на другое имя файла, указав свойство среды spring.config.name. Вы также можете ссылаться на явное местоположение, используя свойство среды spring.config.location (которое представляет собой разделенный запятыми список местоположений каталогов или путей к файлам). В следующем примере показано, как указать другое имя файла:

$ java -jar myproject.jar --spring.config.name=myproject

В следующем примере показано, как указать два местоположения:

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

Для это и некоторые другие варианты изменения внешней конфигурации, смотрите здесь: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot -features-external-config

0 голосов
/ 29 января 2020

Вот одно из возможных решений с использованием инструмента сборки Gradle. Вы должны создать три каталога, такие как США, Германия и Индия, в каталоге ресурсов и хранить эти файлы yml в каждом каталоге. Во время сборки приложения вы должны скопировать указанный файл c yml в каталог ресурсов из каталога страны (США, Германия или Индия). Чтобы определить указанную c страну во время сборки, вы должны передать название страны в качестве параметра, как показано ниже:

./gradlew my-project:bootRun -Pcountry=india

Ниже приведен пример кода gradle для копирования указанного c файла yml из страны. каталог для ресурсов каталог:

def country = project.property('country') //Get the country name

//Copy yml files from country directory to resources directory.
//You have to replace file_path with your projects file path.
task copyYmlFile(type: Copy) {   
    from "file_path/resources/${country}"
    into "file_path/resources"
}

bootRun {
    dependsOn 'copyYmlFile' //Call the yml copy task in the project build time
    //Rest of the codes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...