1. Обзор
В этом быстром учебнике, мы собираемся принять близко взглянуть на как ввести карту из файла YAML в весенней загрузке .
Во-первых, мы начнем с небольшого понимания файлов YAML в Весенней рамочной программе. Затем мы продемонстрируем практический пример того, как связать свойства YAML с Карта .
2. Файлы YAML в весенних рамках
Использование ЯМЛ файлы для хранения данных внешней конфигурации является обычной практикой среди разработчиков Spring. В основном, Весна поддерживает ЯМЛ документы в качестве альтернативы недвижимости и использует ЗмеяЯМЛ под капотом, чтобы разобрать их .
Без дальнейших церемоний давайте посмотрим, как выглядит типичный файл YAML:
server: port: 8090 application: name: myapplication url: http://myapplication.com
Как видим, Файл YAML самоочевидный и более читаемый человеком. На самом деле, YAML предоставляет причудливый и краткий способ хранения данных иерархической конфигурации.
По умолчанию Spring Boot считывает свойства конфигурации из application.properts или application.yml при запуске приложения. Тем не менее, мы можем использовать @PropertySource загрузить пользовательский файл YAML .
Теперь, когда мы знакомы с тем, что такое файл YAML, давайте посмотрим, как внедрить свойства YAML в качестве Карта в весенней загрузке.
3. Как внедрить карту из файла YAML
Весенняя загрузка вывихив экстернализацию данных на следующий уровень, предоставив удобную аннотацию под названием @ConfigurationProperties. Эта аннотация вводится легко вводить внешние свойства из файлов конфигурации непосредственно в java-объекты .
В этом разделе мы подробно охватить, как связать свойства YAML в класс фасоли с помощью @ConfigurationProperties аннотация .
Во-первых, давайте определим некоторые свойства ключевой стоимости в application.yml :
server: application: name: InjectMapFromYAML url: http://injectmapfromyaml.dev description: How To Inject a map from a YAML File in Spring Boot config: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 filesystem: - /dev/root - /dev/md2 - /dev/md4 users: root: username: root password: rootpass guest: username: guest password: guestpass
В этом примере мы постараемся составить карту применение в простую Карта<Стринг, Стринг>. Точно так же мы вводим конфиг детали как Карта<Стринг, Список
Во-вторых, давайте создадим класс фасоли – СерверПредложение – инкапсулировать логику привязки наших свойств конфигурации к Карта секунда:
@Component @ConfigurationProperties(prefix = "server") public class ServerProperties { private Mapapplication; private Map > config; private Map users; // getters and setters public static class Credential { private String username; private String password; // getters and setters } }
Как видим, мы украсили СерверПредложение класс с @ConfigurationProperties. Таким образом, мы говорим Spring, чтобы сопоставить все свойства с указанной приставкой к объекту СерверПредложение .
Напомним, что наше приложение также должно быть включено для свойств конфигурации, хотя это делается автоматически в большинстве приложений Spring Boot.
Наконец, давайте проверьте, правильно ли вводят наши свойства YAML Карта секунда:
@RunWith(SpringRunner.class) @SpringBootTest class MapFromYamlIntegrationTest { @Autowired private ServerProperties serverProperties; @Test public void whenYamlFileProvidedThenInjectSimpleMap() { assertThat(serverProperties.getApplication()) .containsOnlyKeys("name", "url", "description"); assertThat(serverProperties.getApplication() .get("name")).isEqualTo("InjectMapFromYAML"); } @Test public void whenYamlFileProvidedThenInjectComplexMap() { assertThat(serverProperties.getConfig()).hasSize(2); assertThat(serverProperties.getConfig() .get("ips") .get(0)).isEqualTo("10.10.10.10"); assertThat(serverProperties.getUsers() .get("root") .getUsername()).isEqualTo("root"); } }
4. @ConfigurationProperties против @Value
Теперь давайте сделаем быстрое сравнение @ConfigurationProperties и @Value.
Несмотря на то, что обе аннотации могут быть использованы для введения свойств из файлов конфигурации , они совершенно разные. Основное различие между этими двумя аннотациями заключается в том, что каждая из них служит различным целям.
Короче говоря, @Value позволяет нам вводить непосредственно конкретное свойство значение по своему ключу. Тем не менее, @ConfigurationProperties аннотация связывает несколько свойств к определенному объекту и обеспечивает доступ к свойствам через отображенный объект.
В целом, Spring рекомендует использовать @ConfigurationProperties более @Value когда дело доходит до введения данных конфигурации . @ConfigurationProperties предлагает отличный способ централизации и группы свойств конфигурации в структурированный объект, который мы можем ввести позже в другие бобы.
5. Заключение
Подводя итог, мы сначала объяснили, как ввести Карта из файла YAML в весенней загрузке. Затем мы подчеркнули разницу между @ConfigurationProperties и @Value.
Как обычно, полный исходный код для статьи доступен более на GitHub .