11月24日,SpringBoot3.0发布第一个正式GA版本。让我们来看看新版本的变化。2.7版本升级指南官方提供了从2.7版本升级到3.0版本的指南:https://github.com/spring-pro...官方建议先升级到SpringBoot2.7再升级到SpringBoot3.0。新变化基于Java17,支持Java19。SpringBoot3.0使用Java17作为最低版本。如果你目前使用的是Java8或者Java11,需要先升级JDK,新版本已经通过JDK19测试,GraalVM对SpringNative的支持也是此次升级的一大特色。支持使用GraalVM将Spring应用编译成本地可执行的镜像文件,可以显着提升启动速度、峰值性能,减少内存占用。GraalVM的使用可以参考:https://docs.spring.io/spring...三方包升级SpringBoot3.0建立在SpringFramework6的基础上,需要SpringFramework6。此版本中升级的其他Spring项目包括:SpringAMQP3.0。春季批量5.0。SpringData2022.0-发行说明)。春季GraphQL1.1。春季HATEOAS2.0。弹簧集成6.0。春季卡夫卡3.0。春季LDAP3.0。SpringREST文档3.0。春季重试2.0。春季安全6.0春季会议2022.0春季WS4.0。SpringBoot3.0已经从JavaEE升级到JakartaEEAPI。尽可能选择JakartaEE10兼容的依赖:JakartaActivation2.1JakartaJMS3.1JakartaJSON2.1JakartaJSONBind3.0JakartaMail2.1JakartaPersistence3.1JakartaServlet6.0JakartaServletJSPJSTL3.0JakartaTransaction2.0JakartaValidation3.0JakartaWebSocket2.1JakartaWSRS3.1JakartaXMLSOAP3.0JakartaXMLWS4.0另外升级了最新稳定版的第三方jar包。Somenotabledependencyupgradesinclude:CouchbaseClient3.4ElasticsearchClient8.5Flyway9Groovy4.0Hibernate6.1HibernateValidator8.0Jackson2.14Jersey3.1Jetty11jOOQ3.16Kotlin1.7.20Liquibase4.13Lettuce6.2Log4j2.18Logback1.4Micrometer1.10MicrometerTracing1.0Neo4jJavaDriver5.2Netty4.1.77.FinalOkHttp4.10R2DBC1.0Reactor2022.0SLF4J2.0SnakeYAML1.32Tomcat10Thymeleaf3.1.0.M2Undertow2.2.20.FinalLog4j2增强这次升级包括对Log4j2的一些扩展支持,如下,也可以参考官方文档:https://docs.spring.io/spring....配置文件增强比如下面针对不同环境的配置方式。Spring环境属性增强支持在Log4j2配置中引用Spring环境中的属性,使用Spring:前缀。${spring:spring.application.name}系统属性增强Log4j2现在支持更多可配置的System.properties。例如,log4j2.skipJansi系统属性可用于配置控制台Appender是否在Windows上使用Jansi输出流。Log4j2初始化后加载的所有System.properties都可以从SpringEnvironment获得。比如上面的例子,在application.properties中可以配置log4j2.skipJansi=false。@ConstructorBinding检测优化以前,如果我们希望将属性绑定到类,我们可以通过使用@ConfigurationProperties和@ConstructorBinding注解来实现。新版本针对此注释进行了优化。使用构造函数绑定@ConfigurationProperties时,如果类只有一个参数构造函数,则不再需要@ConstructorBinding注解。如果你有多个构造函数,你仍然需要使用@ConstructorBinding来告诉SpringBoot它应该使用哪个构造函数。Micrometer升级SpringBoot3.0以支持Micrometer1.10中引入的新ObservationAPI。新的ObservationRegistry提供了一个API来创建指标和跟踪。新版SpringBoot现在会自动组装ObservationRegistry,ObservationRegistry可以使用ObservationRegistryCustomizer进一步自定义。可以参考官方文档:https://docs.spring.io/spring...MicrometerTracing自动组装SpringBoot现在自动组装MicrometerTracing,包括对Brave、OpenTelemetry、Zipkin和Wavefron的支持。另外,引入io.micrometer:micrometer-registry-otlp包时,OtlpMeterRegistry也会自动组装。具体可以参考官方文档:https://docs.spring.io/spring...Prometheussupport如果有Prometheus依赖和TracerBean,会自动组装SpanContextSupplier,SpanContextSupplier会关联metrics进行trace,因为它将链接当前的traceID和spanID保存到Prometheus的Example中。更灵活的SpringDataJDBC组件SpringDataJDBC的自动装配现在更加灵活。SpringDataJDBC所需的几个自动装配bean现在是有条件的,可以通过定义相同类型的bean来替换。可替换的bean类型如下:org.springframework.data.jdbc.core.JdbcAggregateTemplateorg.springframework.data.jdbc.core.convert.DataAccessStrategyorg.springframework.data.jdbc.core.convert.JdbcConverterorg.springframework.data.jdbc.core。转换.JdbcCustomConversionsorg。springframework.data.jdbc.core.mapping.JdbcMappingContextorg.springframework.data.relational.RelationalManagedTypesorg.springframework.data.relational.core.dialect.DialectKafka异步ACK支持现在可以通过设置spring.kafka.listener.async-acks=true启用Kafka的异步ACK,并设置spring.kafka.listener.async-mode为manual或manual-immediate。新的ElasticsearchJAVA客户端支持支持新版本的ESJAVA客户端自动装配,可以通过属性spring.elasticsearch.*进行配置。如果没有NettyReactor、Jetty反应式客户端和ApacheHTTP客户端,JdkClientHttpConnector会自动装配JdkClientHttpConnector,这允许WebClient与JDK的HttpClient一起使用。@SpringBootTest优化升级现在@SpringBootConfiguration中的任何main方法都可以使用@SpringBootTest注解,但是需要将@SpringBootTest的useMainMethod属性设置为UseMainMethod.ALWAYS或UseMainMethod.WHEN_AVAILABLE。杂项除了上面列出的变化之外,还有一些小的调整和优化,包括:应用程序启动时不再记录主机名,这可以提高启动速度并缩短耗时的网络搜索。删除了对SecurityManager的支持。CommonsMultipartResolver在SpringFramework6中被移除后,对它的支持也被移除。为了与Spring6版本保持一致,不再推荐使用spring.mvc.ignore-default-model-on-redirectWebJar资源处理器路径模式可以使用参数spring.mvc.webjars-path-pattern,spring.webflux.webjars-path-pattern可以使用server.Tomcat.Remoteip.trust-proxy配置自定义Tomcat远程IP阀的受信任代理。可以通过定义ValidationConfigurationCustomizer来自定义Bean验证。Log4j2的Log4jBridgeHandler现在用于将基于JUL的日志路由到Log4j2,而不是通过SLF4J。实现MeterBinder接口的Bean现在仅在初始化所有单例bean后才绑定到仪表注册表。Brave和OpenTelemetry的SpanCustomizerbean现在是自动装配的Micrometer的JvmCompilationMetrics现在是自动装配的。DiskSpaceHealthIndicator现在在其日志消息中包含路径及其运行状况详细信息。DataSourceBuilder现在可以从包装的DataSource派生。现在可以使用spring.data.mongodb.additional-hosts属性为MongoDB配置多个主机。Elasticsearch的socketKeepAlive属性可以使用spring.elasticsearch.socket-keep-alive属性进行配置。使用spring-rabbit-stream时,RabbitStreamTemplate和Environment现在将自动装配,无论spring.rabbitmq.listener.type是否为流。可以使用spring.kafka.admin.modify-topic-configs修改现有的Kafka主题。WebDriverScope和WebDriverTestExectionListener现已公开,以方便在自定义测试配置中使用WebDriver。已弃用的功能ConstructorBinding已从org.springframework.boot.context.properties包更改为org.springframework.boot.context.properties.bind。JsonMixinModule的基于扫描的构造函数已被弃用。ClientHttpRequestFactorySupplier应替换为ClientHttpRequestFactories。不再支持cookie注释属性。RestTemplateExchangeTagsProvider、WebClientExchangeTagsProvider、WebFluxTagsProvider、WebMvcTagsProvider和相关类已被ObservationConvention取代。HealthContributor@Configuration上的无参数构造函数已被弃用。DefaultTestExecutionListenersPostProcessor和SpringBootDependencyInjectionTestExecutionListener已被弃用,取而代之的是SpringFramework的ApplicationContextFailureProcessor。management.metrics.export.已弃用,取而代之的是management..metrics.export。management.prometheus.metrics.export.pushgateway.shutdown-operation支持POST@AutoConfigureMetrics已弃用,推荐使用@AutoConfigureObservability。大部分内容翻译自官方ReleaseNotes:https://github.com/spring-pro...如有错误,请指出,谢谢。