1.介绍

现在,编写应用程序并将其部署到云上而不考虑基础设施是很常见的。金宝搏官网188be无服务器和FaaS已经变得非常流行。

在这种类型的环境中,频繁创建和销毁的情况下,启动和时间的时间非常重要,因为它们可以创建完全不同的用户体验。

在这种情况下,像JavaScript和Python这样的语言总是最受关注的。换句话说,Java的胖jar和长启动时间从来都不是最有力的竞争者。

在本教程中,我们将介绍Quarkus,并讨论它是否能更有效地将Java带到云上

2.千万乌克西奥

夸夸,超音子子java,承诺交付小的工件、极快的启动时间和较低的首次请求时间。当结合GraalVM,Quarkus将提前编制(AOT)。

而且,由于Quarkus建立在标准之上,我们不需要学习任何新东西。因此,我们可以使用CDI和JAX-RS等等。同时,Quarkus有很多扩展,包括支持Hibernate,Kafka,OpenShift,Kubernetes和Vert.x的人。

3.我们的第一个申请

创建新Quarkus项目的最简单方法是打开终端和类型:

mvn io.quarkus:quarkus-maven-plugin:0.13.1:create \ -DprojectGroupId=com.金宝搏188体育baeldung。quarkus \ -DprojectArtifactId=quarkus-project \ -DclassName="com.金宝搏188体育baeldung.quarkus. "HelloResource“\ -Dpath = " /你好”

这将产生项目骨架,aHelloResource与A./你好终端公开,配置,maven项目和dockerfiles。

一旦导入我们的IDE,我们将具有类似于下图所示的结构:

控件的内容HelloResource班级:

@Path("/hello") public class HelloResource {@GET @Produces(MediaType.TEXT_PLAIN) public String hello(){返回"hello";}}

到目前为止一切看起来都很好。现在,我们有了一个带有单个RESTEasy JAX-RS端点的简单应用程序。让我们打开一个终端并运行命令来测试它:

./mvnw编译Quarkus:Dev:

我们的REST端点应在localhost下暴露:8080 / hello。让我们用它来测试旋度命令:

$ curl localhost:8080/hello

4.热重载

在开发模式下运行时(。/ mvn编译quarkus:开发),Quarkus提供热插拔功能。换句话说,一旦刷新浏览器,对Java文件或配置文件所做的更改将自动编译。这里最令人印象深刻的功能是我们不需要保存我们的文件。这可能是好的或坏的,这取决于我们的偏好。

现在我们将修改我们的示例,以演示热重新加载功能。如果应用程序已停止,我们可以简单地在dev模式下重新启动它。我们将使用和之前一样的例子作为我们的起点。

首先,我们将创建一个Helloservice.班级:

@ApplicationScoped public class HelloService {public String politeHello(String name){return "Hello Mr/Mrs " + name;}}

现在,我们将修改HelloResource类,注射Helloservice.并添加一个新方法:

@ inject HelloService HelloService;@GET @Produces(MediaType.APPLICATION_JSON) @Path("/polite/{name}") public String greeting(@PathParam("name") String name) {return helloService.politeHello(name);}

接下来,让我们测试我们的新终点:

$ curl localhost:8080/hello/polite/金宝搏188体育Baeldung你好Mr/Mrs Baeldung

我们将逐一更改以证明可以应用于属性文件。让我们编辑application.properties文件和添加一个多键:

问候=早上好

在那之后,我们将修改Helloservice.要使用我们的新物业:

@configproperty(name =“问候语”)私有字符串问候语;公共字符串PoliteHello(String Name){返回问候语+“”+名称;}

如果我们执行相同的话旋度命令,我们现在应该看到:

早上好Baeldung金宝搏188体育

我们可以通过运行简单地打包应用程序:

./mvnw包

这将在内部生成2个jar文件目标目录:

  • quarkus runner.jar——项目- 1.0 -快照-一个可执行的jar与依赖复制到目标/自由
  • quarkus snapshot.jar——项目- 1.0-包含类和资源文件

我们现在可以运行打包应用程序:

Java -Jar Target / Quarkus-Project-1.0-Snapshot-Runner.jar

5.本机映像

接下来,我们将生成我们应用程序的本机形象。本机图像将提高首次响应的启动时间和时间。换句话说,它包含它需要运行的所有内容,包括运行应用程序所需的最小JVM

要开始,我们需要拥有GraalVM已安装并配置Graalvm_home环境变量。

我们现在将停止应用程序(Ctrl + C),如果没有停止,并运行命令:

./mvnw包 - 运算

这可能需要几秒钟才能完成。因为本机映像试图以AOT方式创建所有代码,以更快地引导,因此,我们将有更长的构建时间。

我们可以跑步./mvnw验证-pnative.为了验证我们的原生工件是正确构建的:

其次,我们会使用我们的本机可执行文件创建容器图像。为此,我们必须有一个集装箱运行时(即码头工人)在我们的机器中运行。让我们打开终端窗口并执行:

./mvnw包--pnative -dnative-image.docker-build = true

这将创建一个Linux 64位可执行文件,因此如果我们使用不同的操作系统,它可能不再可运行。现在还好。

项目生成创建了一个dockerfile.native.为我们:

从registry.fedoraproject.org/fedora-minimal WORKDIR /work/ COPY target/*-runner /work/application运行chmod 775 /work EXPOSE 8080 CMD [". ./应用程序”、“-Dquarkus.http.host = 0.0.0.0”)

如果我们检查这个文件,就会知道接下来会发生什么。首先,我们将创建码头图像:

docker build -f src/main/docker/Dockerfile。本地-t quarkus/quarkus-project。

现在,我们可以使用:

Docker Run -i  -  -RM 8080:8080 Quarkus / Quarkus-Project


容器的启动时间非常低,只有0.009秒。这是夸克的优势之一。

最后,我们应该测试我们的修改余处以验证我们的应用程序:

$ curl localhost:8080/hello/礼貌/Bael金宝搏188体育dung早上好Baeldung

6.部署到OpenShift

一旦我们使用Docker完成本地测试,我们将部署我们的容器openshift.。假设我们在我们的注册表上有Docker映像,我们可以按照以下步骤部署应用程序:

OC New-Build --binary --Name = Quarkus-Project -L App = Quarkus-Project OC补丁BC / Quarkus-Project -P'{“spec”:{“策略”:{“dockerstrategy”:{dockerfilepath“:“src / main / docker / dockerfile.native”}}}}'OC开始 - 构建Quarkus-Project  -  Freom-DIR =。- 关注OC New-App --Image-Stream = Quarkus-Project:最新OC公开服务Quarkus-Project

现在,我们可以通过运行来获取应用程序URL:

oc得到路线

最后,我们将访问相同的端点(注意URL可能会不同,取决于我们的IP地址):

$ curl http://quarkus-project-myproject.192.168.64.2.nip.io/hello/polite/金宝搏188体育Baeldung早上好,Baeldung

7.结论

在本文中,我们演示了Quarkus是一个很好的添加,它可以更有效地将Java带到云中。例如,现在可以想象AWS Lambda上的Java。此外,Quarkus基于JPA和JAX/RS等标准。因此,我们不需要学习任何新东西。

Quarkus最近抓住了很多关注,每天都会增加大量的新功能。我们有几个QuickStart项目可以尝试夸克Quarkus GitHub存储库

与往常一样,本文的代码是可用的在github上。编码快乐!

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>查看课程
评论在本文上关闭!