有自己写过starter包的友友们一定知道,一定用/META-INF/spring.factories文件定义发现自动配置,但是在springboot 2.7,这个文件就被弃用了,在springboot 3.0 就被彻底移除了。
比如之前定义的/META-INF/spring.factories文件:
而现在 这个/META-INF/spring.factories并不是不存在了,只是在3.0之后外部自动配置类是不通过这种方式去配置了。而是通过META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,既然他的路径有所改变,那么底层代码一定也是有改变的,相信大家都看过自动装配的原理,不知道的小伙伴可以去看看我之前的文章。
Spring Native 也是升级的一个重大特性,支持使用GraalVM将SpringBoot 的应用程序编译成本地可执行的镜像文件,可以显著提升启动速度、峰值性能以及减少内存使用。
我们传统的应用都是编译成字节码,然后通过JVM解释并最终编译成机器码来运行,而Spring Native则是通过AOT提前编译为机器码,在运行时直接静态编译成可执行文件,不依赖JVM。GraalVM的即时编译器和AOT编译器可以显著提高应用程序的性能。据测试,GraalVM的性能可以比传统的JVM高出20%-100%。
近几年来,Go语言火了,Go语言是一种编译型语言,我们需要先把Go代码直接编译成为一个二进制执行文件,比如windows上的exe文件,然后直接运行exe文件就能快速启动程序。
如果说,十年前,Spring是Java的春天,那现在GraalVM就是Java的救世主,Java要想不被Go挤掉,整个Java生态都要向GraalVM靠齐。
下载GRaalvm
https://github.com/graalvm/graalvm-ce-builds/releases
下载之后解压安装。
配置
配置完之后可以看下版本
安装Native lmage工具
如果没有安装该工具,maven在打包的时候会自动下载,但建议提前安装打包工具。这一步由于会从github上下载资源、所以会比较久久可能会连接超时,所以需要多试几次。
gu install native-image
到你项目根目录运行生成exe文件
时间可能会有点久
mvn -Pnative native:compile
然后在输出目录就会生成exe文件,
启动,性能加倍。
从Java EE APIs 到 Jakarta EE
Spring Boot 3开始,所有的Java EE Api都需要迁移到Jakarta EE上来。大部分用户需要修改import相关API的时候,要用jakarta替换javax。比如:原来引入javax.servlet.Filter的地方,需要替换为jakarta.servlet.Filter。但还有一些依赖Java EE API的第三方库,目前还没有得到很好的支持,所以在Spring Boot 3中暂时会先移除这类组件的支持(比如:EhCache 3、Infinispan、Jolokia、Pooled JMS等)。所以,目前的M1版本相较2.x版本来说,会有一些特性的缺失。当然大多数应该还只是暂时的,Spring Boot官方会等这些第三方库发布Jakarta兼容库之后再重新引入。
Spring Boot 3.0 基于并需要 Spring Framework 6。
此版本中升级的其他 Spring 项目包括:
Spring AMQP 3.0.
Spring Batch 5.0.
Spring Data 2022.0.
Spring GraphQL 1.1.
Spring HATEOAS 2.0.
Spring Integration 6.0.
Spring Kafka 3.0.
Spring LDAP 3.0.
Spring REST Docs 3.0.
Spring Retry 2.0.
Spring Security 6.0 (see also what’s new).
Spring Session 2022.0.
Spring WS 4.0.
Spring Boot 3.0 已将所有依赖项从 Java EE 迁移到 Jakarta EE API。尽可能选择 Jakarta EE 10 兼容依赖项,包括:
Jakarta Activation 2.1
Jakarta JMS 3.1
Jakarta JSON 2.1
Jakarta JSON Bind 3.0
Jakarta Mail 2.1
Jakarta Persistence 3.1
Jakarta Servlet 6.0
Jakarta Servlet JSP JSTL 3.0
Jakarta Transaction 2.0
Jakarta Validation 3.0
Jakarta WebSocket 2.1
Jakarta WS RS 3.1
Jakarta XML SOAP 3.0
Jakarta XML WS 4.0
我们还尽可能升级到第三方 jar 的最新稳定版本。这里一些值得注意的依赖项升级包括:
Couchbase Client 3.4
Elasticsearch Client 8.5
Flyway 9
Groovy 4.0
Hibernate 6.1
Hibernate Validator 8.0
Jackson 2.14
Jersey 3.1
Jetty 11
jOOQ 3.16
Kotlin 1.7.20
Liquibase 4.13
Lettuce 6.2
Log4j 2.18
Logback 1.4
Micrometer 1.10
Micrometer Tracing 1.0
Neo4j Java Driver 5.2
Netty 4.1.77.Final
OkHttp 4.10
R2DBC 1.0
Reactor 2022.0
SLF4J 2.0