关闭

宣布春天本地测试版!

今天,经过一年半的工作,我很高兴地宣布我们将发布beta版春天本地及其可用性start.m.tujungaca.com!!

在实践中,这意味着除了春天以来的常规Java虚拟机之外,我们还是添加了对编译Spring应用程序的Beta支持本地图片Graalvm.以便提供一种部署Spring应用程序的新方法。支持Java和Kotlin。

这些本机弹簧应用程序可以部署为独立的可执行文件(无需JVM安装),并提供有趣的特性,包括几乎即时启动(通常<100ms),即时峰值性能和更低的内存消耗,以更长的构建时间和更少的运行时优化而不是更少的运行时优化JVM。

本机Spring Boot web应用程序在38毫秒内启动

用简单的mvn spring-boot:构建过程或者Gradle Bootbuildimage.命令,您可以生成一个优化的容器图像,该容器映像将包含最小的OS层和小型本机可执行文件,只需在jdk,spring和您在应用程序中使用的依赖项填写所需位。例如,在最小的容器图像下方,使用50MB可执行文件包含弹簧引导,Spring MVC,Jackson,Tomcat,JDK和应用程序。

最小的容器映像与50MB可执行文件包含:Spring Boot

对于你的Spring应用来说,有很多使用案例可以说明本机的意义:

  • 无服务器与Spring云功能

  • 春天微服务的更便宜和更可持续的托管

  • 适合Kubernetes平台喜欢www.yabo.88VMware Tanzu.

  • 希望创建封装Spring应用程序和服务的最佳容器映像

我相信神奇的Spring社区会发现更多yabo网页这个伟大的教程来自piotrmińkowski如何构建本机微服务编织有春靴和graalvm。

团队工作

Spring Native Beta是春季团队的广泛合作的结果及其项目组合:弹簧框架,春靴,还有春季数据,春季安全,春云和Spring initialIzr。检查此视频以观看春季团队,解释我们如何构建Spring Native Beta以及它提供的内容,包括新的全新演示start.m.tujungaca.com支持。

我们本机工作的范围比Spring更广,因为本机涉及更广泛的JVM生态系统,所以我们一直在与GraalVM团队合作,以提高本机映像的兼容性和内存占用。这是引用自Vojin约万诺维奇来自Graalvm团队:

“与Spring团队合作构建本机JVM生态系统是一件非常愉快的事情:他们深厚的技术知识,加上对社区的敏感接触,总是能找到最好的解决方案。yabo网页最新的Spring Native版本及其在JVM生态系统中的大量使用为本机编译的广泛采用铺平了道路。”

支持范围

通过从Alpha到Beta的春天本土毕业,我认为澄清我们提供的支持的范围是很重要的。

Alpha是我们尝试的第一步,并在一组样本上精致的春天本地(以前命名的Spring Graalvm Native)架构,兼容性和足迹,具有很多破碎的变化。我们还报道了很多问题Graalvm团队修复,以减少JVM之间的差距和用于Spring应用程序的本机。

虽然它仍然被认为是实验性的,但beta意味着Spring现在提供了Spring生态系统的一个子集上对本机的支持。您可以在您的项目中尝试它,如果它们正在使用受支持的依赖项和提出虫子或者贡献拉动请求如果出现问题。最新的Spring Boot 2.x次要版本的每个修补程序发布将发生新的春季原始版本。Spring Native 0.9.0支持Spring Boot 2.4.3,Spring Native 0.9.1将支持Spring Boot 2.4.4等。打破更改将发生,但我们将记录迁移路径。文档质量已达到新级别:参考文档可用作HTML单个页面或者pdf,我们发表javadoc为Native提示公众API

start.m.tujungaca.com

Stéphane妮可引入了对春天的支持start.m.tujungaca.com和相关的IDE集成,所以今天这可能是探索如何构建带春天的本机应用程序的最简单方法。

Spring对start.m.tujungaca.com的本地支持

添加Spring本机依赖项将自动将Maven或Gradle项目配置为所需的依赖项和插件来支持本地。应用程序代码本身不变。

确保检查生成的help.md.包含有用链接和文档的文件,但也指示您是否已选择本机上未知的某些依赖项。

提前的转型

本机与JVM不同:类路径在构建时固定,例如,反射或资源需要配置,没有类延迟加载(可执行文件中运送的所有内存在启动时加载),并且可以调用一些代码在建造时。

为了完全接受这些特性并允许弹簧应用以最大兼容性和原生的最小占用空间运行,布莱恩·克洛泽在这个版本中引入了Spring ahead- time (AOT) Maven和Gradle插件,它们可以对你的应用程序执行提前转换。

第一种转换旨在基于由惊人设计和实现的推论引擎生成GRAALVM本机配置(反射,资源,代理,本机选项)安迪克莱门特,了解春季编程模型和基础设施是什么。例如,对于由此注释的每个班级@控制器,条目将被添加到生成的reflect-config.json.文件。

对于我们正在引入的这些案例,无法推断出一些本机配置本机提示注释(见Javadoc它允许Spring Native以一种更易于维护、类型安全、更灵活的方式支持本机配置,而不是常规的基于JSON的本机映像配置。例如,MySQL驱动程序支持Spring Native提供了一些提示,允许在本机映像中生成正确的条目reflect-config.json.resource-config.jsonNative-Image.properties.如下:

@nativehint(trigger = driver.class,选项=“-enable-all-security-services”,types = @typehint(类型= {failoverconnectionurl.class,failoverdnssrvconnectionurl.class,// ...}),资源= {@resourcehint(patterns =“com / mysql / cj / tlssettings.properties”),@resourcehint(patterns =“com.mysql.cj.localizederrormessages”,iSbundle = true)})公共类MySQLhints实现NativeConfiguration {}

nativeConfiguration.和别的动态配置机制允许更强大和动态的配置生成,但要注意其API将在即将推出的版本中展开很多。

春天开发人员也可以直接注释他们的@ configuration或者@springbootapplication具有特定于应用程序的本机提示的类,例如序列化a按Programmatic API类作为JSON等级创建RestTemplate或者WebClient.

@SpringBootApplication public class WebClientApplication{//…}

使用预先转换系统时可用的最后一种(可能也是最强大的)机制是使用Spring Boot部署模型引入的封闭世界假设和GraalVM本机映像特征自动生成本机优化代码(源代码和字节码)的能力。这里的目标是限制要求额外的本地配置增加兼容性,通过使用代码结构可以由本地图像分析的编译器,和更低的配置所需的排放量减少反射,资源或代理。一个具体的例子是提前转换各种春天(Spring Boot后面的扩展机制)到优化的编程版本,不需要反射,并在应用程序的上下文中过滤出不必要的条目。

这只是春天AOT的一开始,我们打算增加更强大的变换@ configuration功能配置要通过前进的时间分析替换运行时反映,它将自动生成将使用像Lambdas和方法引用等程序化构造的配置类。这将允许GRAALVM本机编译器在不需要任何反射配置的情况下了解框中的弹簧配置或* . class资源。

要记住的关键点是,在使用Spring本机时,默认情况下也使用该AOT生成的代码,以便允许您使用JVM允许的短反馈循环锻炼“本地友好的代码路径”。您的调试器和所有常规工具。

虽然春天的AOT转换目前主要由本机需求推动,但很多人都不是本地特定的,有些人可能会提供用于在JVM上运行弹簧引导应用程序的优化。像往常一样,对于这种主题,重要的是要成为数据驱动,因此我们将衡量推动我们决策的效率和表演。

我们可能会改进IDE集成,现在请务必阅读相关文件有关在IDE中运行应用程序之前更新生成的源的潜在手动配置步骤。

结论

春季战略中有两个主要支柱才能获得本土。第一个是适应本机的Spring基础架构,而无需对数百万现有的Spring引导应用程序进行重大更改。包括我们在春季顶级项目中制作的变更,是本地友好,基础架构@NativeHint和Spring AOT构建插件,我们正在Spring Native中成熟。检查我们的路线图有关即将执行的步骤的更多信息。

第二个柱子比春天本身宽,原生是一个具有不同特性的平台,而不是JVM,但Java生态系统需要尽可能一致,以避免两个非常不同的Java,以挑战维护。这就是为什么我们与Graalvm团队密切合作,以减少这种差距。此协作将集中于在即将到来的几个月内提高更广泛JVM生态系统的本机测试和本机配置。

春天开发人员可以了解有关各种原始的更多信息样品我们提供,继续start.m.tujungaca.com要测试我们的新本机支持,请阅读更新参考指南,读发行说明特别是如果您从以前的版本升级,甚至是贡献对您喜爱的依赖项的支持。你也可以联系我们如果您想了解更多有关Spring商业支持的信息。

我将以很大的感谢春天社区完成,已经为这一惊人的合作以及更加努力制定春天开发人员更容易制作本土采yabo网页用的更加令人惊叹的合作和更广泛的春季团队来完成许多有用的反馈和贡献。。

享受吧!

评论的反驳