小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。
前言
随着微服务和容器技术的不断升级,对应用程序的要求也越来越高,除了最基础的“能快速高效响应请求”外,也要能够快速开发迭代,同时最好能在容器等环境中运行,应用的体积和内存占用也是越小越好。面对这些需求时,Java以及Java主流的开发框架被认为不如其他语言(比如Go)。
Quarkus的出现也许将会扭转这种局面,它采用容器优先的原则,是面向云原生时代的产物,但也能够很好的支持JVM虚拟机。如果你苦于Spring全家桶启动速度慢、内存占用高等问题,那么尝试过Quarkus之后想必会爱上它。尤其是开发阶段的热重载简直是福音,再也不用依赖插件或者点根烟等着重启应用了。
当然这里没有踩一捧一的意思,每个框架都有自己的局限性,不同的时代诞生不同的产品,根据业务需求选择合适自己的框架最重要,任何脱离业务讨论的技术都是耍流氓~
创建应用
废话不多说,牛逼吹出去了,那么直接掏出键盘,我们来一梭子代码。
依赖环境
- 一个IDE(Intellij IDEA永远的神)
- JDK 11+
- Apache Maven 3.8.1+(或者Gradle)
创建项目
目前有很多种方式创建项目,比如直接用IDEA创建,也可以在官网的Start Coding处生成(类似Spring的Spring Initializr),还可以使用git克隆quickstart项目,更可以通过mvn进行创建,这里我们介绍更常用的两种方法。
使用IDEA
这是最推荐的做法,无论是创建还是运行开发,都提供了极大的便利性。
如果你使用的是新版IDEA,那么在File
-New Project
中可以直接创建Quarkus应用,Example code
可以勾选也可以不勾。
选择RESTEasy JAX-RS
,用来实现REST请求。
点击Finish
后,就会自动下载代码模板,稍等片刻后打开项目。
Maven(Gradle)依赖下载完毕后,可以看到这样的项目结构,下面我们就开始进行开发了。
使用官网START CODING
点击下载压缩包
下载完成后解压缩,再通过IDE打开,等待Maven(Gradle)自动下载依赖文件,下载完成后我们看到如下的项目结构
可以看到项目结构与IDEA创建的基本一致,那么我们开始表演。
REST请求
在上文创建的项目中,查看src/main/java/com/demo/GreetingResource.java(或ExampleResource.java)文件,其内容如下:
package com.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy";
}
}
这样就完成了最简单的REST请求,当访问/hello
时,返回Hello RESTEasy
文本。
可以看到Quarkus的开发过程甚至各种注解与SpringBoot相似,可见Spring开发人员能够相对轻松的转向Quarkus。
简单解释一下各个注解的意思:
@Path
相当于Spring的@Controller
+@RequestMapping
@GET
相当于Spring的@GetMapping
@Produces
相当于Spring@RequestMapping
的produces
属性
运行程序
使用Quarkus的话,不需要单独创建Application
启动程序,可以有,但没必要。
使用IDEA启动
如果是IDEA创建的项目,那么可以直接运行
点击OK
点击DEBUG按钮启动程序
启动后,可以看到控制台输出的日志,当出现如下日志时,说明启动成功
使用./mvn启动
打开终端,进入项目目录,运行命令./mvnw compile quarkus:dev
启动成功~
测试请求
启动成功后,通过curl
请求接口
$ curl -w "\n" http://localhost:8080/hello
Hello RESTEasy
返回了Hello RESTEasy
。
这时候我们来修改一下程序,给ExampleResource
添加一个新的请求/2
,看看Quarkus的热重载有多爽。
package com.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class ExampleResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy";
}
@GET
@Path("2")
@Produces(MediaType.TEXT_PLAIN)
public String hello2() {
return "Hello 2";
}
}
代码写完之后,请求新增的/hello/2
接口:
$ curl -w "\n" http://localhost:8080/hello/2
Hello 2
结果直接就出来了,这样的开发体验,不可谓不爽。
收尾
到这里我们就完成了一个基础的Quarkus应用,但离实际的项目开发仍然有一定距离,这里就要提一手私货。在之前的业余时间中,我开发了Quarkus的快速开发脚手架Quarkus-Vue-Admin
,目前已经实现了基础的权限管理、代码生成等功能,拿来即用。利用这个脚手架,可以更容易上手Quarkus开发实际项目,基本可以拿来即用。
目前这个脚手架还存在不少问题,业务时间有限,也希望有想法的朋友们能一起进行开发。
未来我将利用Quarkus-Vue-Admin
开发真实项目案例,在开发的过程中对脚手架进行版本迭代,为Quarkus的发展与传播贡献一份力量。
除了Quarkus-Vue-Admin
以外,群里的大佬正在规划Quarkus的微服务方案,有兴趣的小伙伴可以加群探讨:871808563
。
- 源码地址:github.com/whatever-te…
- 演示站点:whatever-team.github.io/quarkus-vue… admin/888888
- 开发文档:whatever-team.github.io/quarkus-vue…