Рубрики
Без рубрики

Что нового в весенней загрузке 2?

Краткий и практический обзор новых функций Spring Boot 2.

Автор оригинала: José Carlos Valero Sánchez.

1. Обзор

Весенняя загрузка приносит мнение подход к экосистеме Весна. Впервые выпущен в середине 2014 года. Весенняя загрузка прошла через много развития и совершенствования. Его версия 2.0 сегодня готовится к выпуску в начале 2018 года.

Существуют различные области, где эта популярная библиотека пытается помочь нам:

  • Управление зависимостью. Через стартеры и различные интеграции менеджеров пакетов
  • Автоконфигурация. Попытка свести к минимуму количество конфигурации приложение Весна требует, чтобы подготовиться к работе и в пользу конвенции над конфигурацией
  • Производственные функции. Такие, как Актуатор , улучшение лесозаготовок, мониторинга, метрик или различной интеграции PAAS
  • Улучшенный опыт развития. С несколькими утилитами тестирования или лучшим циклом обратной связи с весна-загрузка-devtools

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

2. Зависимости

2.1. Базовый уровень Java

Весенняя загрузка 2.x больше не будет поддерживать Java 7 и ниже , будучи Java 8 минимальным требованием.

Это также первая версия для поддержки Java 9. Поддержка Java 9 на ветке 1.x не планируется. Это означает если вы хотите использовать последний релиз Java и воспользоваться этой структурой, Spring Boot 2.x является единственным вариантом .

2.2. Билль о материалах

С каждым новым выпуском Spring Boot обновляются версии различных зависимостей экосистемы Java. Это определено в Boot законопроект материалов ака BOM .

В 2.x это не исключение. Нет смысла перечислять их, но мы можем посмотреть на весна-загрузка-dependencies.pom чтобы увидеть, какие версии используются в любой момент времени.

Несколько основных моментов, касающихся минимальных необходимых версий:

  • Tomcat минимальная поддерживаемая версия 8.5
  • Зимняя минимальная поддерживаемая версия 5.2
  • Gradle минимальная поддерживаемая версия 3.4

2.3. Gradle Plugin

Gradle плагин был через значительное улучшение и некоторые изменения нарушения.

Чтобы создать жировые банки, bootRepackage Задача Градла заменяется bootJar и bootWar строить банки и войны соответственно.

Если бы мы хотели запустить наши приложения с плагином Gradle, в 1.x, мы могли бы выполнить градл bootRun. В 2.x bootRun расширяет план Gradle JavaExec. Это означает, что нам легче настроить его, применяя ту же конфигурацию, которую мы обычно используем в классических JavaExec Задачи.

Иногда мы оказываемся желающих воспользоваться Весна Boot BOM. Но иногда мы не хотим создавать полное приложение Boot или переупаковывать его.

В связи с этим интересно знать, что Spring Boot 2.x больше не будет применять плагин управления зависимостью по умолчанию .

Если мы хотим управления зависимостью Spring Boot, мы должны добавить:

apply plugin: 'io.spring.dependency-management'

Это дает нам большую гибкость с меньшей конфигурацией в вышеупомянутом сценарии.

3. Автоконфигурация

3.1. Безопасность

В 2.x конфигурация безопасности значительно упрощается. По умолчанию все защищено, включая статические ресурсы и конечные точки привода.

Как только пользователь настраивает безопасность явно, по умолчанию Spring Boot перестанет влиять. Пользователь может настроить все правила доступа в одном месте.

Это не позволит нам бороться с WebSecurityКонфигурерАдаптер вопросы заказа. Эти проблемы обычно возникают при настройке правил безопасности Actuator и App на заказ.

Давайте посмотрим на простой фрагмент безопасности, который смешивает актуатор и правила приложения:

http.authorizeRequests()
  .requestMatchers(EndpointRequest.to("health"))
    .permitAll() // Actuator rules per endpoint
  .requestMatchers(EndpointRequest.toAnyEndpoint())
    .hasRole("admin") // Actuator general rules
  .requestMatchers(PathRequest.toStaticResources().atCommonLocations()) 
    .permitAll() // Static resource security 
  .antMatchers("/**") 
    .hasRole("user") // Application security rules 
  // ...

3.2. Реактивная поддержка

Весенняя загрузка 2 приносит набор новых стартеров для различных реактивных модулей. Некоторые примеры WebFlux, и реактивные аналоги для MongoDB, Кассандра или Redis.

Существуют также тестовые утилиты для WebFlux. В частности, мы можем воспользоваться @WebFluxTest. Это ведет себя так же, как и @WebMvcTest первоначально введен в рамках различных тестов ломтиками обратно в 1.4.0.

4. Производственные функции

Spring Boot приносит некоторые полезные инструменты, позволяющие нам создавать готовые к производству приложения. Среди прочего, мы можем воспользоваться Spring Boot Actuator.

Актуатор содержит различные инструменты для упрощения мониторинга, отслеживания и общего самоанализа приложений. Более подробную информацию об актуаторе можно найти в нашей предыдущей статье.

С его 2 версия актуатор был через значительные улучшения. Эта итерация направлена на упрощение настройки. Она также поддерживает другие веб-технологии, включая новый реактивный модуль.

4.1. Технологическая поддержка

Весной Boot 1.x только Spring-MVC был поддержан для конечных точек привода. В 2.x, однако, он стал независимым и подключаемым. Весенняя загрузка теперь приносит поддержку из коробки для WebFlux, Джерси, и Весна-MVC.

Как и прежде, JMX остается опцией и может быть включен или отключен через конфигурацию.

4.2. Создание пользовательских конечных точек

Новая инфраструктура привода является технологичным агностиком. Из-за этого модель разработки была переработана с нуля.

Новая модель также обеспечивает большую гибкость и выразительность.

Давайте посмотрим, как создать Фрукты конечная точка для привода:

@Endpoint(id = "fruits")
public class FruitsEndpoint {

    @ReadOperation
    public Map fruits() { ... }

    @WriteOperation
    public void addFruits(@Selector String name, Fruit fruit) { ... }
}

Как только мы зарегистрируем ФруктыЭндпойнт в нашем ПриложениеКонтекст, он может быть выставлен в качестве веб-конечной точки с помощью выбранной технологии. Мы также можем разоблачить его через JMX в зависимости от нашей конфигурации.

Перевод нашей конечной точки на веб-конечные точки, это приведет к:

  • ПОЛУЧИТЬ на /применение/фрукты возвращение фруктов
  • POST на /приложения/фрукты/фрукты и обработка, что фрукты, которые должны быть включены в полезную нагрузку

Есть еще много возможностей. Мы могли бы получить больше гранулированных данных. Кроме того, мы могли бы определить конкретные реализации по базовой технологии (например, JMX против Web). Для целей статьи, мы будем держать его в качестве простого введения, не ваяя слишком много деталей.

4.3. Безопасность в Актуаторе

Весной Boot 1.x Actuator определяет собственную модель безопасности. Эта модель безопасности отличается от модели, используемой нашим приложением.

Это было корнем многих болевые точки, когда пользователи пытались уточнить безопасности.

В 2.x конфигурация безопасности должна быть настроена с использованием той же конфигурации, что и остальная часть приложения.

По умолчанию большинство конечных точек привода отключены. Это не зависит от того, весенняя безопасность находится в classpath или нет. Помимо статус и информация, все остальные конечные точки должны быть включены пользователем.

4.4. Другие важные изменения

  • Большинство свойств конфигурации в настоящее время находятся под management.xxx например: management.endpoints.jmx
  • Некоторые конечные точки имеют новый формат. например: env, пролет или liquibase
  • Предопределенные пути конечной точки больше не настраиваются

5. Расширенный опыт развития

5.1. Улучшение обратной связи

Весенняя загрузка введена devtools в 1.3.

Она заботится о сглаживание типичных проблем развития. Например, кэширование технологий представления. Он также выполняет автоматические перезагрузки и браузер живой перезагрузки. Кроме того, это позволяет нам удаленных приложений отладки.

В 2.x, когда наше приложение будет перезапущено devtools отчет «дельта» будет распечатан . В этом отчете будет указаться, что изменилось, и какое влияние это может оказать на наше приложение.

Допустим, мы определяем JDBC Datasource, переопределяющий тот, который настроен Spring Boot.

D evtools будет означать, что один автоконфигурирован больше не создается. Он также указать на причину, неблагоприятный матч в @ConditionalOnMissingBean для типа Javax.sql.DataИсточник: D evtools будет печатать этот отчет, как только он выполняет перезагрузку.

5.2. Нарушение изменений

Из-за проблем JDK 9 devtools снижает поддержку удаленной отладки через HTTP.

6. Резюме

В этой статье мы рассмотрели некоторые изменения, которые принесет Весенняя загрузка 2.

Мы обсудили зависимости и то, как Java 8 становится минимально поддерживаемой версией.

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

Наконец, мы говорили о некоторых незначительных настроек, которые произошли в разработке инструментов.