Spring Native 的 Hello World

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Spring Native 的 Hello World

@[toc]

Spring Native 的 Hello World


Spring Native 的 Hello World

构建 Spring Boot native 应用程序有 2 种方式:

  • 使用 Spring Boot Buildpacks support 构建一个包含本地可执行文件的轻量级容器。
  • 使用 the GraalVM native image Maven plugin support 构建一个本地可执行文件。

本文只介绍第一种。

系统要求

在待构建的机器上,必须安装了 Docker,可以参考 Get Docker,同时注意要能够以非 root 用户启动和运行。

可以通过使用 docker run hello-world (不包含sudo)命令检查 Docker daemon 是否可用。

示例代码

一个简单的 Spring Boot Web 程序:

git clone https://github.com/spring-guides/gs-rest-service
cd gs-rest-service/complete

配置 Spring Boot 版本

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.4</version>
    <relativePath/>
</parent>

添加 Spring Native 依赖

org.springframework.experimental:spring-native提供了 native 配置的 API,例如 @NativeHint 这些 Spring 运行成 native image 的注解类。

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.springframework.experimental</groupId>
        <artifactId>spring-native</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

添加 Spring AOT 插件

Spring AOT 插件执行代码的提前转换,用以修复 native image 的兼容性。

<build>
    <plugins>
        <!-- ... -->
        <plugin>
            <groupId>org.springframework.experimental</groupId>
            <artifactId>spring-aot-maven-plugin</artifactId>
            <version>0.9.1</version>
            <executions>
                <execution>
                    <id>test-generate</id>
                    <goals>
                        <goal>test-generate</goal>
                    </goals>
                </execution>
                <execution>
                    <id>generate</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

开启 native image 支持

Spring Boot 的 Spring Boot Buildpacks support 可以将 Spring Boot 应用程序打包成一个容器。native image buildpack 可以通过 BP_NATIVE_IMAGE 环境变量开启。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <builder>paketobuildpacks/builder:tiny</builder>
            <env>
                <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
            </env>
        </image>
    </configuration>
</plugin>

Maven Repository

<repositories>
    <!-- ... -->
    <repository>
        <id>spring-release</id>
        <name>Spring release</name>
        <url>https://repo.spring.io/release</url>
    </repository>
</repositories>

构建本地应用程序

mvn spring-boot:build-image

通过此命令,可以创建一个使用 GraalVM native image compiler 构建的 Linux 容器,默认情况下,这个镜像是在本地。

运行本地应用

docker run --rm -p 8080:8080 rest-service:0.0.1-SNAPSHOT

现在服务已经启动了,可以通过 localhost:8080/greeting 访问服务。在浏览器中可以看到

{
   "id":1,"content":"Hello, World!"}
相关文章
|
10月前
|
自然语言处理 JavaScript 前端开发
Spring Native
Spring Native
176 0
|
15小时前
|
Java Maven Docker
0.07 秒启动一个 SpringBoot 项目!Spring Native 很强!!
0.07 秒启动一个 SpringBoot 项目!Spring Native 很强!!
26 2
|
15小时前
|
Cloud Native Java Docker
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
|
8月前
|
弹性计算 IDE Java
从零搭建Spring Boot的Hello World
本教程将使用IntelliJ IDEA搭建一个简单SpringBoot项目,在项目中运行一个Hello World请求示例,并部署到阿里云服务器ECS上。
285 0
|
8月前
|
人工智能 JavaScript Java
2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南
2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南
136 0
|
10月前
|
Java 关系型数据库 Serverless
走向Native化:Spring&Dubbo AOT 技术示例与原理讲解
Java 应用在云计算时代面临“冷启动”慢、内存占用高、预热时间长等问题,无法很好的适应 Serverless 等云上部署模式,GraalVM 通过静态编译、打包等技术在很大程度上解决了这些问题,同时针对 GraalVM 的一些使用限制,Spring 和 Dubbo 等主流框架也都提供了相应的 AOT 解决方案。本文我们将详细分析 Java 应用在云时代面临的挑战,GraalVM Native I
159 0
走向Native化:Spring&Dubbo AOT 技术示例与原理讲解
|
11月前
|
Dubbo Java 应用服务中间件
走向 Native 化:Spring&Dubbo AOT 技术示例与原理讲解
走向 Native 化:Spring&Dubbo AOT 技术示例与原理讲解
621 1
|
Oracle JavaScript 前端开发
在spring boot3中使用native image
在之前spring boot3文章中我们介绍了,spring boot3的一个重要特性就是支持把spring boot3的应用编译成为GraalVM的Native Image。 今天我们用具体的例子来给大家演示一下如何正确的将spring boot3的应用编译成为native image。
在spring boot3中使用native image
|
Java 应用服务中间件 Spring
spring学习的第一课:Hello world!
spring学习的第一课:Hello world!
73 0
|
Java Maven 开发者
Spring Boot - Hello World | 学习笔记
快速学习Spring Boot - Hello World
134 0
Spring Boot - Hello World | 学习笔记

热门文章

最新文章