Spring Native Beta版现在提供了一种部署Spring应用程序的新方法。springnative允许您使用GraalVM本机映像编译器将Spring应用程序编译为本机映像。
这有什么好处?即时启动、即时峰值性能和减少内存消耗,因为本机Spring应用程序部署为独立的可执行、良好的docker映像,而不包括JVM安装。
缺点是什么?它的GraalVM构建过程,试图使最理想的形象可能,抛出了很多东西。这可能是依赖项、资源或代码的一部分。
缓解这一问题的方法是向GraalVM提供一堆配置文件,这些文件将导致它在映像中包含额外的内容。要使此过程自动化,您可以使用提示对代码进行注释,以便指示Spring AOT插件生成这些配置文件。
然而,Spring原生包包括Spring原生配置,在springboot的真正精神中,它为您处理它。它包含Spring类的配置提示,因此它无需进一步ado即可处理框架。一些驱动程序已经被注释,例如MySQL驱动程序支持Spring Native,并提供提示,允许在本机映像文件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 {}
Spring AOT构建插件可用于bot Maven和Gradle,在运行应用程序和测试之前调用,可能需要额外的IDE配置。生成的文件源是可用的,如果需要可以检查。
这种需要出现在以下情况下:
- 需要指定其他本机配置:
- 当基于反射的序列化在编程API中使用时,比如使用Jackson的WebClient
- 当您尝试使用SpringNative尚不支持的功能或库时
当您想要指定与您自己的应用程序相关的本机配置时。
在这些情况下,您可以用@Configuration
或@SpringBootApplication
和@NativeHint
注释已经注释过的类,或者在足够简单的情况下直接使用@TypeHint
(一个@NativeHint
是包含@TypeHints
在内的多种配置的容器)。
这意味着在大多数情况下,您的Spring引导应用程序(包括JPA和Spring Security)可以很好地编译为本机,除非您有一些奇特的依赖项,您需要通过提示或调整生成的配置文件来包含这些依赖项。
除了JPA和Spring Security之外,springnative还可以与springcloud一起工作,这样您就可以将springcloud函数编译成一个映像,然后像googlecloudrun一样部署它,或者像AWS Lambda一样部署它!
尽管在Beta版中,springnative仍然是实验性的,这意味着您必须谨慎地使用它,而不是在生产代码中使用它。在start.spring.io上引导新的应用程序仍然包括本机的构建选项。在路线图上有很多值得期待的地方。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1943.html
暂无评论