前言

在云原生时代,java似乎显得很臃肿,动辄几百兆的JDK和较慢的启动速度限制了在云上的拓展能力,而且java流行的重要特性“一次编写,到处运行”也在随着容器化的技术而变得不那么重要;很明显java也随之与时俱进,积极朝着云原生的方向改进。比如JDK16支持musl libc可以在AlpineLinux安装,减小镜像的体积。最重要的更新当属于GraalVM,可以直接将java代码编译成本地的机器码,运行时不需要JAVA环境,可以大大缩小镜像的体积,也可以减小java程序的启动时间。
当前新一代的面向云原生的java框架Quarkus已经发布了多个版本,自然Sping框架也不能落后,发布了beat版本,具体链接https://spring.io/blog/2021/03/11/announcing-spring-native-beta

Windows下编译

spring官网下载Spring Native的demo了,导入idea中。按照官方的教程https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/#overview操作。

环境准备

  • maven版本要3.5以上。
  • 下载对应的GraalVM版本。这里选择windows的版本。
  • 下载vs社区版。
  • 工作负载只需要选择C++的桌面应用
  • 语言包选择英文,这一点尤为重要,否则后面会报错。
  • 安装完成后,还需要配置一些环境变量,具体参考https://blog.csdn.net/q412086027/article/details/113878426
    在这里插入图片描述
    使用官网下载的demo,简单写一个Restful接口。
package com.example.nativedemo.controller;

/**
 * @author xiaolong7713
 */
@Slf4j
@RequestMapping("/student")
@RestController
public class DemoController {
    @GetMapping("")
    public List<Student> info() {
        return List.of(Student.builder().name("张三").age("18").build());
    }

    @Data
    @Builder
    static class Student {
        private String name;
        private String age;
    }
}

需要先执行spring-aot:generate生成spring-aot的辅助框架,其次才能运行Main程序(Quarkus不需要提前生成框架,通过命令直接运行了程序,似乎调试又变得麻烦了)。
在这里插入图片描述
启动时间约为2秒左右。

打包成本地代码,mvn -Pnative-image package,最后在target目录会有个exe的文件

在这里插入图片描述
点击可以直接运行。
在这里插入图片描述
启动很快,毫秒级的。测试接口也正常返回。
在这里插入图片描述

Linux下编译

linux下编译的环境准备

  • maven版本要3.5以上,需要配置环境变量。
  • 下载对应的GraalVM版本。这里选择linux版本,同样需要配置环境变量。
  • 安装yum install zlib-devel,否则会出现/usr/bin/ld: cannot find -lz 解决错误。

linux版本为VMware虚拟机,CentOS Linux release 7.8.2003 (Core),配置为4核-4G。

在源码目录下执行,mvn -Pnative-image package,最后在target目录会有个全路径的文件,可运行
在这里插入图片描述
运行./com.example.nativedemo.nativedemoapplication
在这里插入图片描述
启动时间更快,基本上是立即响应。调用接口返回正常。
在这里插入图片描述

打包成docker镜像

springboot-native也提供了打包成镜像的方式,按照教程上操作了没有成功,文档上写的比较简洁,出错了不好排查问题。对此Quarkus提供的demo里包含了打包成镜像的dockerfile文件,更加友好。当然springboo-native打包成镜像,可以自己对照着Linux的编译方式准备一套编译环境,再构建镜像。

后续

下一次继续研究集成数据库和其他中间件的使用,按照官网介绍的一些基于字节码操作的工具应该是不能使用的,也一起测试下。

参考资料

  1. https://quarkus.io/get-started/
  2. https://spring.io/blog/2021/03/11/announcing-spring-native-beta
  3. https://www.infoq.cn/article/RQfWw2R2ZpYQiOlc1WBE
  4. https://www.infoq.cn/article/fZjvu3iHc96Lm3puRlmk?utm_source=infoq&utm_medium=con&utm_campaign=talc&utm_term=quarkus
  5. https://blog.csdn.net/q412086027/article/details/113878426
  6. https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/#overview
  7. https://www.cnblogs.com/dehai/p/14258391.html
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐