Spring Native 0.10.0 发布,重大突破!!

简介: 6 月初的时候给大家介绍了 Spring 团队的最新杀手锏项目:Spring Native,它的存在就是干掉 JVM,另起一个 JVM 之外的生态,上篇也简单实战了一下,相信大家都有了一个全新的认知,没看过的可以点链接进去看下。

Spring Native 上一个版本为:0.9.2,只支持 Spring Boot 2.4.5。

Spring Native 最近又发布了基于 Spring Boot 2.5 和 GraalVM 21.1 的最新 0.10.0 版本:

image.png

Spring Boot 前阵子刚升级到 Spring Boot 2.5.1,Spring Native 现在就开始支持 Spring Boot 2.5,支持进度真快,对研究 Spring Native 的同学也是福音了。。


Spring Native 0.10.0 带来了一些新特性,还包括 43 个 bug 修复、文档改进、依赖升级等。


Spring Native 0.10.0 新特性

1、支持 Gradle 插件

以前仅提供 Maven 插件支持,现在终于可以支持官方 Gradle 插件了。


并且,还提供了新的构建工具(native-build-tools):


https://github.com/graalvm/native-build-tools


它取代了之前的 native-image-maven-plugin 插件,它可以通过本地原生镜像编译器来构建和测试你的原生应用。


这个升级就感觉有点大,意味着之前那个插件的玩法就行不通了,需要用这个新的构建工具插件。。


2、支持原生测试

现在可以使用 mvn -Pnative test 或 gradle nativeTest 以原生镜像的方式运行 JUnit 5 单元测试用例。


另外,Spring Native 现在也添加了单元测试初始化支持,因此以 @SpringBootTest 编写的单元测试用例也可以作为原生镜像运行。Spring Boot 单元测试不清楚的,可以关注公众号:Java技术栈,看看栈长写的教程。


3、支持基于类的代理

我们都知道,原生镜像需要在构建时就定义代理,在前面的 Spring Native 版本中,Spring Native 也只能支持基于接口的 JDK 代理,不支持通过 CGLIB 基于普通类的代理,因为 Spring Native 的原生特性就不能支持在运行时生成字节码。

// Typical security use case of a class proxy now supported on native
@Service
public class GreetingService {
    public String hello() {
        return "Hello!";
    }
    @PreAuthorize("hasRole('ADMIN')")
    public String adminHello() {
        return "Goodbye!";
    }
}

但是从 Spring Native 0.10.0 这个版本开始,基于普通类的代理也可以搞定了,现在可以在构建时通过 @AotProxyHint 注解来生成类的代理,这真是一个大的突破,牛皮!!!


需要注意的是:


以前的 @ProxyHint 已重命名为 @JdkProxyHint,以避免混淆。


它支持安全性、事务、以及其他基于普通类的代理机制,后续也将改进对此类模式的自动检测,以减少大量所需的显示提示。


总结

本文介绍了 Spring Native 0.10.0 的 3 个重要的核心特性,每个都是重磅,可以看出 Spring Native 还处于快速的更新迭代中。


更多发布的细节可以参考:


https://github.com/spring-projects-experimental/spring-native/releases


快速开启 Spring Native:


https://start.spring.io/

image.png

如图所示,Spring Native 目前还属于体验项目,但它无需 JVM,有更快的性能、更少的资源占用,这肯定是未来的趋势,有兴趣的可以研究下,有不清楚的可以看看栈长的 Spring Native 实战,源码已经上传:


https://github.com/javastacks/javastack


栈长有时间也会继续研究分享 Spring Native 动态及教程,公众号Java技术栈第一时间推送,请大家持续关注哦!


最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励。


参考资料:


https://spring.io/blog/2021/06/14/spring-native-0-10-0-available-now


https://github.com/spring-projects-experimental/spring-native


版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重大家的劳动成果和知识产权,抄袭必究。

目录
相关文章
|
自然语言处理 JavaScript 前端开发
Spring Native
Spring Native
229 0
|
3月前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
98 0
|
6月前
|
Java Maven Docker
0.07 秒启动一个 SpringBoot 项目!Spring Native 很强!!
0.07 秒启动一个 SpringBoot 项目!Spring Native 很强!!
83 2
|
6月前
|
Cloud Native Java Docker
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
|
Java 关系型数据库 Serverless
走向Native化:Spring&Dubbo AOT 技术示例与原理讲解
Java 应用在云计算时代面临“冷启动”慢、内存占用高、预热时间长等问题,无法很好的适应 Serverless 等云上部署模式,GraalVM 通过静态编译、打包等技术在很大程度上解决了这些问题,同时针对 GraalVM 的一些使用限制,Spring 和 Dubbo 等主流框架也都提供了相应的 AOT 解决方案。本文我们将详细分析 Java 应用在云时代面临的挑战,GraalVM Native I
208 0
走向Native化:Spring&Dubbo AOT 技术示例与原理讲解
|
Dubbo Java 应用服务中间件
走向 Native 化:Spring&Dubbo AOT 技术示例与原理讲解
走向 Native 化:Spring&Dubbo AOT 技术示例与原理讲解
691 1
|
Java Linux API
Spring Native 的 Hello World
Spring Native 的 Hello World
103 0
|
XML 消息中间件 Java
Spring Boot 3.0发布,最低支持Java 17,新特性介绍
Spring Boot 3.0正式发布,距离Spring 2.0发布过去了4年半时间。最低支持Java 17,Spring Framework 6.0.本文详细介绍Spring Boot 3.0 新特性。
5821 12
Spring Boot 3.0发布,最低支持Java 17,新特性介绍
|
Oracle JavaScript 前端开发
在spring boot3中使用native image
在之前spring boot3文章中我们介绍了,spring boot3的一个重要特性就是支持把spring boot3的应用编译成为GraalVM的Native Image。 今天我们用具体的例子来给大家演示一下如何正确的将spring boot3的应用编译成为native image。
在spring boot3中使用native image
|
Java 程序员 API
Spring Boot 3.0.0正式发布,Banner不再支持图片&增强可观测性
技术向前的大船,浩浩荡荡不可逆。作为技术人,我们能做的是keep moving,不管是技术架构师还是业务架构师,还是开发工程师!
539 0
Spring Boot 3.0.0正式发布,Banner不再支持图片&增强可观测性