springboot-native编译实践

前言

在云原生时代,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操作。

环境准备

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值