使用 Spring Boot 和 GraalVM 实现原生(系列四)
集成应用程序
Spring不仅仅是HTTP端点。无数其他框架,包括Spring Batch,Spring Integration,Spring Security,Spring Cloud以及不断增长的其他框架,都提供了良好的Spring Native支持。
让我们快速看一个 Spring 集成应用程序示例。Spring 集成是一个支持企业应用程序集成 (EAI) 的框架。Gregor Hohpe和Bobby Woolf的开创性著作《企业集成模式》为世界提供了集成模式的通用语言。Spring Integration给了它实现这些模式的抽象。
转到 Spring 初始化器,命名项目集成,选择 Java 17,添加 、 ,然后单击 。您需要手动将一个依赖项添加到您的:Spring Native,
Spring Integration
Spring Web
Generate
pom.xml
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-file</artifactId>
<version>${spring-integration.version}</version>
</dependency>
更改以下代码:IntegrationApplication.java
package com.example.integration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.file.dsl.Files;
import org.springframework.integration.file.transformer.FileToStringTransformer;
import org.springframework.integration.transformer.GenericTransformer;
import java.io.File;
@SpringBootApplication
public class IntegrationApplication {
@Bean
IntegrationFlow integration(@Value("file://${user.home}/Desktop/integration") File root) {
var in = new File(root, "in");
var out = new File(root, "out");
var inboundFileAdapter = Files
.inboundAdapter(in)
.autoCreateDirectory(true)
.get();
var outboundFileAdapter = Files
.outboundAdapter(out)
.autoCreateDirectory(true)
.get();
return IntegrationFlows //
.from(inboundFileAdapter, spec -> spec.poller(pm -> pm.fixedRate(1000)))//
.transform(new FileToStringTransformer())
.transform((GenericTransformer<String, String>) source -> new StringBuilder(source)
.reverse()
.toString()
.trim())
.handle(outboundFileAdapter)
.get();
}
public static void main(String[] args) {
SpringApplication.run(IntegrationApplication.class, args);
}
}
这个应用程序很简单:它监视任何新文件的目录()。一旦看到任何内容,它就会创建一个副本,其内容反转并将其写到 .应用程序在 JRE 上在 0.429 秒内启动!这很好,但让我们看看将其转换为 GraalVM 本机可执行文件会给我们带来什么。$HOME/Desktop/integration/in
String
$HOME/Desktop/integration/out
mvn -Pnative -DskipTests clean package
该应用程序在 55.643 秒内编译完成!它在 0.029 秒内启动 (),需要 35.5 兆字节的 RAM。不错!./target/integration
将应用程序投入生产
我们希望在某个时候将这些应用程序投入生产,而现在的生产是 Kubernetes。Kubernetes在容器方面工作。我们需要一个容器。Buildpacks 项目背后的核心概念是集中和重用将应用程序工件转换为容器的公式。您可以通过 pack CLI 使用 Buildpack,也可以通过 KPack 在 Kubernetes 集群中使用 Buildpack,或者通过 Spring Boot 构建插件使用。我们将使用最后一个选项,因为它只需要 Docker 桌面。请在此处查看 Docker 桌面。
mvn spring-boot:build-image
此命令将在容器内生成本机可执行文件,因此你将在 Linux 容器中获取 Linux 本机二进制文件。然后,可以将 docker 标记和 docker 推送到所选的容器注册表。当我在 2022 年 1 月写这篇文章时,M<> Mac 上的 Docker 构建包仍然有点不稳定。但我相信这很快就会得到解决!
- 点赞
- 收藏
- 关注作者
评论(0)