Spring boot 1.X и Spring Boot 2.X не предоставляют одинаковые параметры и поведение для _ 1_.
Очень хороший ответ М. Дейнума относится к особенностям Spring Boot 1.
Я обновлю для Spring Boot 2 здесь.
Источники и порядок свойств среды
Spring Boot 2 использует очень специфический порядок PropertySource, который разработан, чтобы позволить разумное переопределение значений. Свойства рассматриваются в следующем порядке:
Свойства глобальных настроек Devtools в вашем домашнем каталоге (~ / .spring-boot-devtools.properties, когда devtools активен).
@TestPropertySource аннотации к вашим тестам.
@SpringBootTest#properties атрибут аннотации в ваших тестах. Аргументы командной строки.
Свойства из SPRING_APPLICATION_JSON (встроенный JSON, встроенный в переменную среды или системное свойство).
ServletConfig параметры инициализации.
ServletContext параметры инициализации.
Атрибуты JNDI из java:comp/env.
Свойства системы Java (System.getProperties()).
Переменные среды ОС.
RandomValuePropertySource, который имеет свойства только в случайном порядке. *.
Свойства приложения, зависящие от профиля, за пределами вашего упакованного jar-файла (варианты application-{profile}.properties и YAML).
Зависящие от профиля свойства приложения, упакованные внутри вашего jar-файла (варианты application-{profile}.properties и YAML).
Свойства приложения за пределами вашего упакованного jar-файла (варианты application.properties и YAML).
Свойства приложения, упакованные внутри вашего jar-файла (варианты application.properties и YAML).
@PropertySource аннотаций к вашим @Configuration классам. Свойства по умолчанию (задаются установкой SpringApplication.setDefaultProperties).
Чтобы указать файлы внешних свойств, вас должны заинтересовать следующие параметры:
Свойства приложения, зависящие от профиля, за пределами вашего упакованного jar-файла (варианты application-{profile}.properties и YAML).
Свойства приложения за пределами вашего упакованного jar-файла (варианты application.properties и YAML).
@PropertySource аннотаций к вашим @Configuration классам. Свойства по умолчанию (задаются установкой SpringApplication.setDefaultProperties).
Вы можете использовать только один из этих трех вариантов или комбинировать их в соответствии с вашими требованиями.
Например, для очень простых случаев достаточно использовать только свойства, зависящие от профиля, но в других случаях вы можете использовать оба свойства, зависящие от профиля, по умолчанию свойства и @PropertySource.
Расположение файлов application.properties по умолчанию
Что касается application.properties файлов (и вариантов), Spring по умолчанию загружает их и добавляет их свойства в среду из них в следующем порядке:
Высшие приоритеты буквально означают:
classpath:/,classpath:/config/,file:./,file:./config/.
Как использовать файлы свойств с определенными именами?
Ячейки по умолчанию не всегда достаточно: местоположения по умолчанию, такие как имя файла по умолчанию (application.properties), могут не подходить. Кроме того, как и в вопросе OP, вам может потребоваться указать несколько файлов конфигурации, кроме 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 настроен со значением _35 _, _ 36_, порядок поиска будет следующим:
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, они используются в дополнение к расположениям по умолчанию.
На практике
Итак, предположим, что, как и в вопросе OP, у вас есть 2 файла внешних свойств, которые нужно указать, и 1 файл свойств, включенный в uber jar.
Чтобы использовать только указанные вами файлы конфигурации:
-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 в последнем примере не требуется, поскольку он есть в местоположениях по умолчанию, и эти местоположения по умолчанию здесь не перезаписываются, а расширяются.
person
davidxxx
schedule
17.08.2018
application.propertiesвсегда будет загружаться, сspring.config.locationвы можете добавить дополнительные местоположения конфигурации, которые проверяются на наличие файлов (то есть, когда он заканчивается на/), однако если вы поместите туда разделенный запятыми список, указывающий на файлы, которые будут загружены. Это также объясняется в Справочном руководстве по загрузке Spring здесь - person M. Deinum   schedule 16.09.2014