Подтвердить что ты не робот

Как добавить несколько файлов application.properties в spring -boot?

У меня есть приложение загрузки Spring, которое разделено на несколько модулей. Основной модуль запускает приложение и имеет файл application.properties в папке ресурсов. Мне интересно, могу ли я добавить еще один файл свойств в подмодуле, чтобы отделить свойства, принадлежащие этому модулю, и как заставить это работать (потому что это не так).

+main_module
  +src
    +main
      +java
        +my/package/Application.java
        +resources/application.properties
+support_module
  +src
    +main
      +java
        +resources/application.properties

Итак, это текущая ситуация. Очевидно, что файл свойств в модуле support_module не читается, вызывая NoSuchBeanDefinitionException, а если я помещаю содержимое в другой файл свойств, все работает нормально.

4b9b3361

Ответ 1

То, что вы пытаетесь сделать, не будет работать при использовании Maven или Gradle. Причина в том, что когда создается артефакт (скорее всего, с момента использования Spring Boot), в корне будет только один application.properties файл.

Я предлагаю вам либо изменить имя файла свойств в модуле поддержки, либо затем настроить Spring Boot для поиска этого файла (посмотрите this или этот для указателей) или использовать какую-то задачу слияния для вашего инструмента построения (что-то вроде this возможно)

Ответ 2

Вы также можете сослаться на явное местоположение, используя свойство среды spring.config.location (разделенный запятыми список каталогов или пути к файлам)

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

Для получения дополнительной информации нажмите здесь

Ответ 3

Spring Boot считывает файлы свойств в следующем порядке. (Из Spring Boot в действии)

  1. Внешне в подкаталоге /config каталога, из которого запускается приложение
  2. Внешне в каталоге, из которого запускается приложение
  3. Внутренне, в пакете с именем 'config'
  4. Внутренне, в корне пути к классам

Список упорядочен по приоритету (свойства, определенные в местоположениях выше в списке, переопределяют свойства, определенные в нижних местоположениях).

Поэтому размещение application.properties в подкаталоге config даст ему более высокий приоритет. В следующей конфигурации application.properties из module_a будет иметь приоритет. Вы можете добавить общие значения по умолчанию в application.properties и переопределить их в отдельных модулях, поместив файл конфигурации в config/application.properties.

+common_module
  +src
    +main
      +java
      +resources/application.properties
+module_a
  +src
    +main
      +java
        +my/package/Application.java
      +resources/config/application.properties

Ответ 4

Проблема именно в том, что описывает @geoand. Spring boot загружает верхний уровень application.properties и игнорирует любой файл свойств с точным именем, который находится в других банках.

Но я не нашел конкретной реализации того, как решить эту проблему, так что здесь это для тех, кто хочет знать реализацию.

Рассмотрим конфигурацию этого проекта:

+main_module
  +src
    +main
      +java
        +my/package/Application.java
      +resources/application.properties
+module_aa
  +src
    +main
      +java
        +my/package/config/ModuleAAConfig.java
      +resources/module_aa.properties
+module_bb
  +src
    +main
      +java
        +my/package/config/ModuleBBConfig.java
      +resources/module_bb.properties

Теперь, чтобы правильно загрузить свойства для каждого подмодуля, нам нужно добавить аннотацию @PropertySource к конфигам каждого модуля, т.е. ModuleAAConfig.java, ModuleBBConfig.java.

Пример:

ModuleAAConfig.java

package my.package.config;

@Configuration
@PropertySource(
    ignoreResourceNotFound = false,
    value = "classpath:module_aa.properties")
public class ModuleAAConfig {}

ModuleBBConfig.java

package my.package.config;

@Configuration
@PropertySource(
    ignoreResourceNotFound = false,
    value = "classpath:module_bb.properties")
public class ModuleBBConfig {}

Бонус:

Если вы хотите загрузить специфичное для профиля свойство, вы можете сделать это, используя переменные пружины, например,

@PropertySource("classpath:module_aa-${spring.profiles.active}.properties")