Spring Native是Spring推出微服务体系Spring Cloud之后的又一大举动,从名字可以猜出,Spring Native是一门面向云原生的技术。如果你还对这个概念不太理解,可以多看一点东西,比如Oracle的GraalVM、红帽的quarkus等。

现在 我们跟着官方示例 Spring Native Docs 一起来跑一下最简单的SN程序。



官方提供了两种方式来构建本地镜像,第一种是基于Docker容器的,我试了好几天也没成功,执行到mvn spring-boot:build-image就失败了,说有“No valid dependencies”。所以这里演示第二种,直接生成可执行文件,这种我成功了。

前奏

使用第二种方法不需要Docker,所以可以关掉了,但是需要调大内存(第一种应该也需要)。

1. 提升可用内存

因为我用的是WSL,所以就是提高它的内存。打开C盘下用户目录的.wslconfig(没有就创建一个)



将其中的memory改成16G,这是我电脑的全部内存大小。如果你电脑内存不够16G,是多少全分给WSL;如果超过了16G,写16G也够,随你。

2. 设置代理

这个过程会依赖GITHUB等一些网站,如果不能外窥,就会总是失败。我尝试了各种网上的代理方法,就算配置成功也不能成功通信,最后还是使用了付费软件。

如果你有自己的SOCKS服务器那说明你会成功的。如果没有,我这边用的是大熊猫,你可以试试,不算太贵,还算稳定,主要是不限流量

找到Linux版本下载下来是一个appimage文件,执行它就打开了登录窗口。还好现在WSL支持图形界面了,不然还是用不了。

准备

接下来按照官方指导,安装GraalVM并下载代码。

1. 安装SKDMAN

在WSL中执行curl -s "https://get.sdkman.io" | bash即可(这一步不需要能够外窥)。

执行成功后,可以执行sdk list java看看正常不。

2. 安装GraalVM

官方安装的版本是11,我们这里使用17.

哦对了,SpringNative 0.11虽然支持Java8,但是后续正式版估计只支持17+,所以这里我也用17。没尝试Java8,有兴趣可以自己试一下。正常GraalVM是不支持java8的,可能需要协调

执行 sdk install java 21.3.0.r17-grl,这个过程需要外窥,所以打开代理。我也折腾了半天才提示成功。

成功后执行sdk use java 21.3.0.r17-grl(可以通过tab补全),然后重启命令行才行,不用重启WSL。这个也折腾了好久,后来看到github上有人报issue才解决。

可以通过sdk current查看结果:

另外需要将本地镜像扩展native-image引入JDK,执行gu install native-image。如果说gu这个命令找不到,可以去GraalVM的bin目录寻找,在WSL的~/.sdkman/candidates/java/21.3.0.r17-grl/bin下面,不过它是一个链接:

3. 配置maven依赖

根据 Sample Project Setup 修改pom.xml。这一整节的内容都要完整修改(除了Test部分可以不改)。

构建

在complete目录执行 mvn -Pnative -DskipTests package 即可,这个过程有点长,而且非常占用内存,大约7个G。打包结束后会立即释放内存的,相当于给你电脑进行了一次清理:)

执行

在target目录下已经打好可执行文件了:

运行这个文件即可。由于是原生应用,启动应该贼快,这也是构建原生应用的目的之一。然后访问 localhost:8080/greeting

最后

目前云原生概念和技术都在高速发展,Java领域的就主要集中在Graal上面,SN和quarkus也都基于GraalVM。可以继续钻研。

尝试官方的第一个SpringNative 0.11程序(WSL2)的更多相关文章

  1. solaris X86-64下一个ORACLE战斗11.2.0.3.8在一波折叠补丁

    solaris X86-64下一个ORACLE战斗11.2.0.3.8补丁: 正确的步骤: 1.BUG6880880 .OPATCH补丁 2.BUG16902043.11.2.0.3.8补丁 情感是练 ...

  2. Kafka 0.11.0.0 实现 producer的Exactly-once 语义(官方DEMO)

    <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients&l ...

  3. Tomcat8.0.11优化相关

    Tomcat 8.0.X: 要了解tomcat的优化,我们先看看Tomcat的官方定义:The Apache Tomcat® software is an open source implementa ...

  4. Redis-4.0.11集群配置

    版本:redis-3.0.5 redis-3.2.0  redis-3.2.9  redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial. 集群 ...

  5. Mysql8.0.11简介,新特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

  6. MySQL-mysql 8.0.11安装教程 windows

    网上的教程有很多,基本上大同小异.但是安装软件有时就可能因为一个细节安装失败.我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的. 安装环境:win7 1.下载zip安装包: MySQL ...

  7. 微信小程序0.11.122100版本新功能解析

    微信小程序0.11.122100版本新功能解析   新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...

  8. Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)

    很高兴地告诉大家,具备新的里程碑意义的功能的Kafka 0.11.x版本(对应 Confluent Platform 3.3)已经release,该版本引入了exactly-once语义,本文阐述的内 ...

  9. MySQL 8.0.11安装配置

    官网地址:https://dev.mysql.com/downloads/mysql/ 我这里是RHEL6.5的系统,因此选择RedHat 6 x86,64bit操作系统---下载第一个RPM Bun ...

  10. MySQL8.0.11 组复制配置

     my.cnf [mysql] prompt='node2 [\h] {\u} (\d) > ' # [client] user = sa password = cc.123 port = 22 ...

随机推荐

  1. Golang 版本 支付宝支付SDK app支付接口2.0

    参考技术贴: https://blog.csdn.net/ming2316780/article/details/86505883 对接文档: https://opendocs.alipay.com/ ...

  2. LVS负载均衡(6)--LVS调度算法详解

    目录 1. LVS调度算法详解 1.1 静态调度算法 1.1.1 RR调度算法 1.1.2 WRR调度算法 1.1.3 SH调度算法 1.1.4 DH调度算法 1.2 动态调度算法 1.2.1 LC调 ...

  3. Springboot 项目集成 PageOffice V6 最简单代码

    本文描述了PageOffice产品在Springboot项目中如何集成调用.(本示例使用了Thymeleaf模板引擎) 新建Springboot项目:pageoffice6-springboot2-s ...

  4. mvn install:install-file -Dfile=D:\Clipper1.jar -DgroupId=de.lighti -DartifactId=Clipper -Dversion=6.4.2 -Dpackaging=jar

    mvn install:install-file -Dfile=D:\Clipper1.jar -DgroupId=de.lighti -DartifactId=Clipper -Dversion=6 ...

  5. 基于Ubuntu20.04在k8s 1.25部署gin+MySQL服务

    0. 前言 某天突发奇想,既然都学了 docker 了,那干脆,顺便把 kubernetes 也学了,于是开始了我长达一个月的环境搭建.踩坑历程. 最开始,我的想法是,在我的物理机使用 WSL + d ...

  6. JavaScript 中 toString 的奇妙使用

    JavaScript 中的toString()方法,我们通常会一些其他类型的变量,转为字符串类型.但这里还有一些其他奇妙的用法. 不同的类型调用 toString() 会得到不同的结果.我们来一一分析 ...

  7. 鸿蒙极速入门(一)-HarmonyOS简介

    1.华为官网介绍 2.OpenHarmony开源项目 3.技术架构 内核层 内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核 驱动子系统:驱动框 ...

  8. Leetcode-937-Reorder Log Files-(Easy)

    一.题目描述 You have an array of logs.  Each log is a space delimited string of words. For each log, the ...

  9. 《iOS面试之道》-“串行队列的代码实战” 勘误

    一.原书第一版154页开始讲解串行队列.并发队列.以及在Dispatch_Async.Dispatch_Sync下面的作用 最后一段代码: if(_q == NULL) { _q = dispatch ...

  10. 【论文笔记】SegNet

    [深度学习]总目录 SegNet是Cambridge提出旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,开放源码,基于caffe框架.SegNet运用编码-解码结构和最大池化索引进行上采样,最主 ...