Статьи об использовании новых функций 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
Весенний ботинок@Configuration
class, который сокращает время запуска и использование памяти.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-test
JUnit 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