Spring新版本抛弃JVM,可独立部署,网友:要自立门户???
共 5921字,需浏览 12分钟
·
2021-06-14 13:06
往期热门文章:
1、记一次因 Redis 使用不当导致应用卡死 bug 的排查及解决!
转自:
https://spring.io/blog/2021/03/11/announcing-spring-native-beta
mvn spring-boot:build-image
或gradle bootBuildImage
命令,您可以生成一个优化的容器映像,该映像将包含一个最小的 OS 层和一个小的本机可执行文件,该映像仅随附 JDK,Spring 以及您在应用程序中使用的依赖项中的必需位。具有 Spring Cloud 功能的无服务器 以更便宜和更可持续的方式托管 Spring 微服务 非常适合 VMware Tanzu 等 Kubernetes 平台 想要创建最佳的容器映像来打包您的 Spring 应用程序和服务
1. 团队协作
2.支持范围
3.start.spring.io
HELP.md
文件,该文件包含了有用的链接和文档,同时它还能标记出来你是否选择了一些在原生环境下不支持的依赖。4. 提前转换
@Controller
,一个条目将被添加到生成的reflect-config.json
文件中。reflect-config.json
,resource-config.json
以及native-image.properties
如下:@NativeHint(
trigger = Driver.class,
options = "--enable-all-security-services",
types = @TypeHint(types = {
FailoverConnectionUrl.class,
FailoverDnsSrvConnectionUrl.class,
// ...
}), resources = {
@ResourceHint(patterns = "com/mysql/cj/TlsSettings.properties"),
@ResourceHint(patterns = "com.mysql.cj.LocalizedErrorMessages",
isBundle = true)
})
public class MySqlHints implements NativeConfiguration {}
NativeConfiguration
和其他动态配置机制允许更强大的和动态的配置生成,但要注意它们的 API 将在即将到来的版本演变了很多。
Spring 开发人员还可以使用特定于应用程序的本机提示直接注释其@Configuration
或@SpringBootApplication
类,例如,Book
通过诸如RestTemplate
或的编程 API 将类序列化为 JSON WebClient
:
@TypeHint(types = Book.class)
@SpringBootApplication
public class WebClientApplication {
// ...
}
与提前转换系统一起使用时,最后一种可能是最强大的机制是使用 Spring Boot 部署模型与 GraalVM native 结合引入的封闭世界假设自动生成本机优化代码(源代码和字节码)的功能。图像特征。这里的目标是通过使用本机图像编译器可以开箱即用地分析的代码构造来限制所需的额外本机配置的数量,以提高兼容性,并通过减少反射所需的配置数量来减少占用空间,资源或代理。
一个具体的例子是各种形式的提前转换spring.factories
(Spring Boot 背后的扩展机制)到优化的程序设计版本,该版本不需要反射,并且可以在应用程序的上下文中过滤掉不必要的条目。
这只是 Spring AOT 的开始,我们打算向[@Configuration
功能配置中添加更强大的转换,以通过提前分析来替换运行时反射,该提前分析将自动生成配置类,这些配置类将使用 lambda 和方法引用之类的程序化构造。这将使 GraalVM 本机图像编译器可以立即了解 Spring 配置,而无需任何反射配置或*.class
资源。
要记住的一个关键点是,在使用 Spring Native 时,默认情况下在 JVM 上也会使用 AOT 生成的代码,以允许您使用 JVM 允许的短反馈循环来行使“本机友好的代码路径”。您的调试器和所有常规工具。
尽管 Spring AOT 转换当前主要由本机需求驱动,但是其中许多不是本机特定的,并且可能其中一些可以提供优化以在 JVM 上运行 Spring Boot 应用程序。与此类主题一样,重要的是数据驱动,以便我们测量效率和绩效来决定我们的决策。
我们可能会改进 IDE 的集成,现在确保在 IDE 中运行应用程序之前,请先阅读相关文档以进行潜在的手动配置步骤,以更新生成的源代码。
5. 结论
Spring 战略要本地化有两个主要支柱。第一个是使 Spring 基础结构适应本机,而无需对数百万个现有的 Spring Boot 应用程序进行重大更改。其中包括我们在 Spring 顶级项目中所做的更改,以使其对本机友好,@NativeHint
我们将在 Spring Native 中成熟的基础架构(例如)和 Spring AOT 构建插件。
第二个支柱比 Spring 本身更广泛,native 是一个具有与 JVM 不同的特性的平台,但是 Java 生态系统需要尽可能地一致,以避免两种非常不同的 Java 风格,这将难以维护。这就是为什么我们与 GraalVM 团队进行深入合作以缩小这一差距的原因。在接下来的几个月中,这项合作将专注于为更广泛的 JVM 生态系统改善本机测试和本机配置。
往期热门文章:
1、《历史文章分类导读列表!精选优秀博文都在这里了!》
2、为什么不建议你用a.equals(b)判断对象相等 3、为什么 Java 后端开发没有大规模采用 Kotlin? 4、为什么不推荐使用BeanUtils属性转换工具 5、Top 16 的 Java 工具类,你用过几个? 6、分享几个酷炫的 IDEA 主题 7、Intellij IDEA 这样配置注释模板,让你瞬间高出一个逼格!
8、【建议收藏】面试官会问的位运算奇淫技巧 9、到底可不可以用 kill -9 关闭程序? 10、IDEA 2021首个大版本发布,新增了这几个超实用功能!