Приходите и посмотрите, какие новые функции вы можете использовать в выпуске SpringBoot 2.2?

Spring Boot

Статьи об использовании новых функций SpringBoot 2.2 можно найти в блоге автора.blog.yuqiyu.com

Обновление Spring Framework

SpringBoot2.2нижний слойSpring Frameworkобновление версии до5.2.

JMX отключен по умолчанию

JMX больше не включен по умолчанию. Эту функцию можно включить с помощью свойства конфигурации spring.jmx.enabled=true. Если вы используете функции IDE для управления своим приложением, вы также можете включить этот флаг.

Поддержка Java 13

Spring boot 2.2 добавляет поддержку Java 13. Также поддерживаются Java 8 и 11.

повышение производительности

используяproxyBeanMethods=falseВесенний ботинок@Configurationclass, который сокращает время запуска и использование памяти.proxyBeanMethodsда@ConfigurationНовые свойства, представленные в Spring Framework 5.2 M1.proxyBeanMethodsТакже доступен как атрибут@SpringBootApplicationа также@SpringBootConfiguration.

В использованииbootRunГрейдл илиspring-boot:runКогда Maven запускает приложение во время разработки, JVM будет настроен с флагом (-Xverify:noneа также-XX:TieredStopAtLevel=1), чтобы оптимизировать его и сократить время запуска. При работе на JDK 13-Xverify:noneНе указан, потому что он был заброшен.

В этой версии также были внесены некоторые другие улучшения производительности:

  • Время, необходимое для привязки большого количества свойств конфигурации, значительно сократилось.
  • Когда весенняя загрузкаPersistenceUnitСобственное сканирование сущностей Hibernate отключено, поскольку оно избыточно при полной подготовке путем сканирования сущностей JPA.
  • Точки внедрения в автоконфигурации были улучшены, чтобы работать только в том случае, если необходимо создать bean-компонент.
  • Компоненты, связанные с конечной точкой привода, теперь создаются только в том случае, если конечная точка включена и открыта (через JMX или HTTP).
  • Состояние автоматическая конфигурация кодека была улучшена таким образом, чтобы она больше не была настроена при использовании кодека
  • Реестр Tomcat MBean по умолчанию отключен, что уменьшает объем памяти Tomcat примерно на 2 МБ.

ленивая инициализация

теперь черезspring.main.lazy-initializationСвойство включает глобальную ленивую инициализацию для сокращения времени запуска. Обратите внимание, что за использование этой функции взимается плата:

  • Обработка HTTP-запросов может занять больше времени при любой отложенной инициализации.
  • Теперь, как правило, он не будет давать сбой при запуске до более позднего времени.

Отдельные bean-компоненты могут отказаться от ленивой инициализации, аннотируя их соответствующие определения с помощью@Lazy(false). если не в состоянии@Lazy(false)отказаться от ленивой инициализации,LazyInitializationExcludeFilterВместо этого вы можете использовать Bean. Например, никогда не ставитьIntegrationFlowКомпонент настроен на ленивый, вы можете использовать следующий код:

@Bean
static LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() {
    return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class);
}

JUnit 5

spring-boot-starter-testJUnit 5 теперь предоставляется по умолчанию. Устаревший механизм JUnit 5 включен по умолчанию для поддержки существующих тестовых классов на основе JUnit 4, чтобы вы могли перейти на JUnit 5, когда будете готовы. Также возможно смешивать тестовые классы на основе JUnit 4 и JUnit 5 в одном модуле. Это позволяет постепенно переходить на JUnit 5 по мере необходимости.

Обратите внимание, что подключаемый модуль Maven Surefire для JUnit 4 не поддерживает это.listenerАтрибуты. Если у вас есть конфигурация Maven, похожая на:

<configuration>
    <properties>
        <property>
            <name>listener</name>
            <value>com.example.CustomRunListener</value>
        </property>
    </properties>
</configuration>

нельзя использовать,junit-vintage-engineВместо этого вам нужно явно вернуться к JUnit 4:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-junit-jupiter</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

Мониторинг состояния источника данных

ДолженDataSourceПоказатели здоровья содержат дополнительныйvalidationQueryПроверка свойств запроса с помощью используемого объектаDataSource. Точно так жеhelloРезультат запроса, предоставляемый свойством, был переименован вresult.

Конфигурация шаблона Freemarker

В этом выпуске изменено расширение файла шаблона по умолчанию для шаблонов Freemarker. Это приводит Spring Boot в соответствие с настройками безопасности веб-приложения по умолчанию. При обновлении переименуйте существующие шаблоны из*.ftlдля*.ftlh.

Каталог конфигурации DevTools

Предпочтительное место для глобальных настроек DevTools теперь~/.config/spring-boot. Можно использовать любой из следующих файлов:

  • spring-boot-devtools.properties
  • spring-boot-devtools.yaml
  • spring-boot-devtools.yml

@ConfigurationPropertiesScan

@ConfigurationPropertiesАннотированные классы теперь можно найти с помощью сканирования путей к классам вместо использования@EnableConfigurationPropertiesили@Component. Добавить к@ConfigurationPropertiesScanв ваше приложение, чтобы включить сканирование.

Сканирование свойств конфигурации включено по умолчанию в Spring Boot 2.2.0, но начиная с Spring Boot 2.2.1 вы должны выбрать с помощью@ConfigurationPropertiesScan.

@ConstructorBinding

Свойства конфигурации теперь поддерживают привязку на основе конструктора, что позволяет выполнять привязки с@ConfigurationPropertiesАннотированные классы неизменяемы. Аннотацию можно сделать с помощью@ConfigurationPropertiesкласс или один из его конструкторов, чтобы включить привязку на основе конструктора@ConstructorBinding. Теперь можно использовать такие свойства конфигурации, как@DefaultValueи примечания@DateTimeFormat.

Устаревание в Spring Boot 2.2

  • Долженlogging.fileсобственность переименована вlogging.file.name.
  • Долженlogging.pathсобственность переименована вlogging.file.path.
  • server.connection-timeoutЭто свойство устарело, и следует использовать специфичные для сервера свойства, поскольку они ведут себя по-разному.
  • server.use-forward-headersИспользование этого свойства устарелоserver.forward-headers-strategy; доserver.use-forward-headers=trueБудет использоваться собственная поддержка веб-сервера. Теперь вы можете добиться того же, используяserver.forward-headers-strategy=native. Поскольку каждый сервер имеет определенное поведение, теперь мы предоставляем альтернативу, основанную на SpringForwardedHeaderFilter:server.forward-headers-strategy=framework. Разработчики должны использовать тот вариант, который лучше всего подходит для их случая использования.
  • ReactiveWebServerApplicationContext#getWebServerFactory.
  • agentСвойства Maven плагин был переименован вagents.
  • Поддержка времени Joda устарелаjava.time.
  • ApplicationHealthIndicatorв пользуPingHealthIndicator, всегда вносит свой вклад.
  • ConfigurationBeanFactoryMetadataсогласнаConfigurationPropertiesBean.
  • ConfigurationPropertiesBindingPostProcessorсогласна@EnableConfigurationPropertiesилиregisterконструктор метода.
  • ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAMEпереехал вEnableConfigurationProperties.VALIDATOR_BEAN_NAME.
  • ConfigurationPropertiesBindingPostProcessorRegistrarсогласна@EnableConfigurationProperties.
  • WebTestClientBuilderCustomizerпереехал вorg.springframework.boot.test.web.reactive.server.

автор личноблог

Используйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API