Весняне завантаження 1.X та Spring Boot 2.X не забезпечують однакових варіантів та поведінки щодо Externalized Configuration.
Дуже гарна відповідь М. Deinum стосується особливостей Spring Boot 1.
Я оновлю для Spring Boot 2 тут.
Джерела та порядок властивостей навколишнього середовища
Spring Boot 2 використовує дуже особливий PropertySourceпорядок, розроблений для забезпечення розумного переосмислення значень. Властивості розглядаються в наступному порядку:
Властивості глобальних налаштувань Devtools у вашому домашньому каталозі (~ / .spring-boot-devtools.properties, коли devtools активний).
@TestPropertySource анотації на ваших тестах.
@SpringBootTest#propertiesатрибут анотації на ваших тестах. Аргументи командного рядка.
Властивості з SPRING_APPLICATION_JSON(вбудований JSON вбудований у змінну середовища або властивість системи).
ServletConfig параметри init.
ServletContext параметри init.
Атрибути JNDI від java:comp/env.
Властивості системи Java ( System.getProperties()).
Змінні середовища ОС.
A, RandomValuePropertySourceщо має властивості лише випадковим чином. *
Властивості програми, що стосуються профілю, поза вашою упакованою баночкою ( application-{profile}.propertiesта варіантами YAML).
Властивості програми, специфічні для профілю, упаковані всередині вашої банки ( application-{profile}.propertiesта варіанти YAML).
Властивості програми за межами вашої упакованої банки ( application.propertiesта варіантів YAML).
Властивості програми, упаковані всередині вашої банки ( application.propertiesта варіанти YAML).
@PropertySourceанотації на ваших @Configurationзаняттях. Властивості за замовчуванням (задаються налаштуваннями
SpringApplication.setDefaultProperties).
Щоб вказати файли зовнішніх властивостей, ці параметри повинні вас зацікавити:
Властивості програми, що стосуються профілю, поза вашою упакованою баночкою ( application-{profile}.propertiesта варіантами YAML).
Властивості програми за межами вашої упакованої банки ( application.propertiesта варіантів YAML).
@PropertySourceанотації на ваших @Configurationзаняттях. Властивості за замовчуванням (задаються налаштуваннями
SpringApplication.setDefaultProperties).
Ви можете використовувати лише один із цих 3 варіантів або комбінувати їх відповідно до своїх вимог.
Наприклад, для дуже простих випадків, що використовують лише властивості, характерні для профілю, достатньо, але в інших випадках ви можете використовувати як властивості, характерні для профілю, так і властивості за замовчуванням @PropertySource.
Місце за замовчуванням для файлів application.properties
Про application.propertiesфайли (і варіант) за замовчуванням Spring завантажує їх і додає їх властивості в середовище з них у такому порядку:
Вищі пріоритети настільки буквально:
classpath:/,classpath:/config/,file:./,file:./config/ .
Як використовувати файли властивостей із конкретними іменами?
Місце розташування за замовчуванням не завжди достатньо: місця за замовчуванням, такі як назва файлу за замовчуванням ( application.properties), можуть не відповідати. Крім того, як і у запитанні про ОП, вам може знадобитися вказати кілька файлів конфігурації, окрім application.properties(та варіанту).
Такspring.config.name буде недостатньо.
У цьому випадку вам слід вказати чітке розташування, використовуючи spring.config.locationвластивість оточення (що є розділеним комами списком розташування каталогів або шляхів до файлів).
Щоб бути вільним щодо шаблону імен файлів, надайте перевагу списку шляхів файлів над списком каталогів.
Наприклад, так:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Цей спосіб є найбільш багатослівним, що просто вказує папку, але це також спосіб дуже тонко вказати наші конфігураційні файли та чітко задокументувати ефективно використовувані властивості.
spring.config.location замінює місця за замовчуванням замість того, щоб додавати їх
З Spring Boot 1 spring.config.locationаргумент додає вказані місця у середовищі Spring.
Але з Spring Boot 2 spring.config.locationзамінює місця за замовчуванням, які використовує Spring, на вказані місця в середовищі Spring, як зазначено в документації .
Коли налаштовані власні розташування конфігуруються за допомогою
spring.config.location, вони замінюють місця за замовчуванням. Наприклад, якщо spring.config.locationналаштований зі значенням
classpath:/custom-config/, file:./custom-config/порядок пошуку стає наступним:
file:./custom-config/
classpath:custom-config/
spring.config.locationТепер це спосіб переконатися, що будь-який application.propertiesфайл повинен бути чітко вказаний.
Для uber JAR, які не мають пакетуapplication.properties файли, це досить приємно.
Щоб зберегти стару поведінку під spring.config.locationчас використання Spring Boot 2, ви можете використовувати нове spring.config.additional-locationвластивість замість того, spring.config.locationщо все ще додає місця, як зазначено в документації :
Крім того, коли налаштовані власні місця конфігурування налаштовано за допомогою
spring.config.additional-location, вони використовуються на додаток до стандартних місць.
На практиці
Отже, припустимо, що як і у запитанні про ОП, у вас є 2 зовнішніх файли властивостей, які потрібно вказати, та 1 файл властивостей, що входить до банку uber.
Щоб використовувати лише вказані файли конфігурації:
-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties
Щоб додати до них файли конфігурації у місцях за замовчуванням:
-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties
classpath:/applications.properties в останньому прикладі не потрібно, оскільки локації за замовчуванням мають це, і що типові місця тут не перезаписані, а розширені.
application.propertiesЗавжди буде завантажений, зspring.config.locationви можете додати додаткові місця конфігурації, які перевіряються для файлів (тобто , коли він закінчується з/) , однак , якщо ви поставите запитом список там , що вказує на файли ті будуть завантажені. Це також пояснено у Посібнику з весняних завантажень тут