Пришло время разобраться с конфигурационным файлом Spring Boot application.properties!

Spring Boot
Пришло время разобраться с конфигурационным файлом Spring Boot application.properties!

В Spring Boot файлы конфигурации имеют два разных формата: свойства и yaml.

Хотя файлы свойств более распространены, yaml более лаконичен и понятен, чем свойства, и используется в большем количестве сценариев.Многие проекты с открытым исходным кодом используют yaml для настройки (например, Hexo). Помимо простоты, у yaml есть еще одна особенность, то есть данные в yaml упорядочены, а данные в свойствах неупорядочены.В некоторых конфигурациях, требующих сопоставления путей, порядок особенно важен (например, в конфигурации Spring Cloud Zuul in ), в настоящее время мы обычно используем yaml. О ямле Сонг Гэ писал ранее статью:Введение в конфигурацию yaml в Spring Boot.

В этой статье в основном рассматривается проблема свойств.

проблема местоположения

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

  1. В каталоге config в корневом каталоге текущего проекта
  2. В корневом каталоге текущего проекта
  3. В каталоге конфигурации в каталоге ресурсов
  4. каталог ресурсов

В приведенном выше порядке приоритет четырех файлов конфигурации уменьшается по очереди. следующее:

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

Например, теперь создайте каталог javaboy в каталоге ресурсов и сохраните файл application.properties в каталоге.При нормальных обстоятельствах, когда мы запускаем проект Spring Boot, этот файл конфигурации не будет загружаться автоматически. Мы можем вручную указать расположение файла конфигурации через свойство spring.config.location.После того, как спецификация будет завершена, система автоматически выполнит поиск файла application.properties в указанном каталоге.

Когда вы начнете проект в этот момент, вы обнаружите, что проект начинается сclasspath:/javaboy/application.propertieПрофиль запускается.

Это необходимо для настройки местоположения запуска в средстве разработки.Если проект был упакован в банку, добавьте параметр местоположения в команду запуска:

java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

проблема с именем файла

Для application.properties он не обязательно должен называться application, но проект по умолчанию загружает файл конфигурации с именем application.Если наш файл конфигурации не называется приложением, это также возможно, но файл файла конфигурации должен быть четко указанное имя.

Метод такой же, как указанный путь, за исключением того, что ключ на данный момент — spring.config.name.

Сначала мы создаем файл app.properties в каталоге ресурсов, а затем указываем имя файла конфигурации в IDEA:

Указав имя файла конфигурации, снова запустите проект.В это время система автоматически перейдет к четырем местоположениям по умолчанию, чтобы найти файл конфигурации с именем app.properties. Разумеется, файлы конфигурации, допускающие настраиваемые имена файлов, размещаются не в четырех местах по умолчанию, а в пользовательском каталоге В этом случае вам необходимо явно указать spring.config.location .

Расположение файла конфигурации и имя файла можно настроить одновременно.

Обычная инъекция собственности

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

Например, теперь определите класс Book:

public class Book {
    private Long id;
    private String name;
    private String author;
    //省略 getter/setter
}

Затем определите свойства в файле application.properties:

book.name=三国演义
book.author=罗贯中
book.id=1

Традиционным способом (как в Spring) эти свойства можно внедрить непосредственно в объект Book через аннотацию @Value:

@Component
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //省略getter/setter
}

Уведомление

Сам объект Book также передается в контейнер Spring для управления.Если Book не передан в контейнер Spring, свойства в Book не могут получить значения из контейнера Spring.

После завершения настройки внедрите объект Book в контроллер или модульный тест, запустите проект, и вы увидите, что свойства были внедрены в объект.

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

Например, в каталоге ресурсов настройте файл book.properties со следующим содержимым:

book.name=三国演义
book.author=罗贯中
book.id=1

На этом этапе запуск проекта не будет автоматически загружать файл конфигурации.Если он находится в конфигурации XML, вы можете обратиться к файлу свойств следующим образом:

<context:property-placeholder location="classpath:book.properties"/>

Если это конфигурация Java, вы можете импортировать конфигурацию через @PropertySource:

@Component
@PropertySource("classpath:book.properties")
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //getter/setter
}

Таким образом, при запуске проекта автоматически загружается файл book.properties.

Это простое использование внедрения свойств в Spring и не имеет ничего общего с Spring Boot.

Типобезопасное внедрение свойств

Spring Boot вводит безопасное для типов внедрение свойств.Если принят метод конфигурации в Spring, когда есть много настроенных свойств, рабочая нагрузка очень велика и подвержена ошибкам.

Использование типовой инъекции свойств может эффективно решить эту проблему.

@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    //省略getter/setter
}

Здесь в основном вводится аннотация @ConfigurationProperties(prefix = "book") и настраивается префикс свойства. В это время соответствующие данные в контейнере Spring будут автоматически внедрены в соответствующее свойство объекта, поэтому нет необходимости вводить по одному через аннотацию @Value. , снизить нагрузку и избежать ошибок.

Суммировать

application.properties — важный носитель, настроенный в Spring Boot, и здесь можно настроить свойства многих компонентов. Его использование похоже на yaml. Для настройки yaml вы можете обратиться кВведение в конфигурацию yaml в Spring Boot.

Я загрузил случай этой статьи на GitHub:GitHub.com/Len VE/Java не…

Ну, если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение для обсуждения.

Обратите внимание на общедоступную учетную запись [Jiangnan A Little Rain], сосредоточьтесь на технологиях с полным стеком, таких как Spring Boot + микросервисы и разделение интерфейса и сервера, делитесь регулярными видеоуроками, отвечайте на Java после того, как уделите внимание, и получайте Сухие товары Java тщательно приготовлены Songge для вас!