4年前 (2021-05-23)  Serverless |   抢沙发  741 
文章评分 0 次,平均分 0.0

使用SpringNative将Spring应用程序编译为本地镜像

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

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册