最近几年,Spring全家桶横扫其它Java框架,已然成为事实标准,单体应用使用Spring Framework+Spring Boot,服务治理Spring Cloud,生态完善,各种组件层出不穷。曾经还玩过JFinal和Nutz等国内的开发框架,但是仅仅是私下玩玩,实际工作过程中,还是Spring的天下,很少会选择其它小众的框架(谁知道会不会有填不完的大坑)。
最近在社区闲逛的时候,发现一个Red Hat开源的Java框架Quarkus,定位为GraalVM和OpenJDK HotSpot量身定制的一个Kurbernetes Native Java框架。虽然开源时间较短,但是生态方面也已经达到可用的状态,自身包含扩展框架,已经支持像Netty、Undertow、Hibernate、JWT等框架,足以用于开发企业级应用,用户也可以基于扩展框架自行扩展。
开发环境
除了一般的Java开发环境外,你还需要额外安装Graalvm,用于构建Native应用。
Graalvm安装参考:Install GraalVM
创建项目
你可以使用Maven命令快速创建一个Quarkus应用,也可以自行搭建。
方式一:快速创建命令如下(来源于官网):
mvn io.quarkus:quarkus-maven-plugin:0.15.0:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName="org.acme.quickstart.GreetingResource" \
-Dpath="/hello"
方式二:自行搭建,首先创建一个Maven项目,添加Quarkus的依赖和plugin,参考如下:
4.0.0
cn.centychen
quarkus-simple-example
1.0-SNAPSHOT
3.0.0-M3
0.14.0
io.quarkus
quarkus-bom
${quarkus.version}
pom
import
io.quarkus
quarkus-resteasy
io.quarkus
quarkus-junit5
test
io.rest-assured
rest-assured
test
maven-compiler-plugin
3.8.0
1.8
1.8
io.quarkus
quarkus-maven-plugin
${quarkus.version}
build
maven-surefire-plugin
${surefire-plugin.version}
org.jboss.logmanager.LogManager
编写Resource类,实际就是Restful接口,按照Restful思想,接口即资源,所以叫Resource挺贴切的。该类中实现一个/hello/{name}
接口,参考如下:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
/**
* @author: cent
* @email: [email protected]
* @date: 2019/5/4.
* @description:
*/
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{name}")
public CompletionStage hello(@PathParam("name") String name) {
//使用异步响应
return CompletableFuture.supplyAsync(() -> String.format("Hello,%s!", name));
}
}
你会发现,上面没有像Spring Boot框架一样编写main方法,也没有部署到Web容器(如Tomcat、Undertow等)中,那么应该如何启动测试呢?很简单,命令行进入项目根目录,通过以下命令启动开发测试:
mvn compile quarkus:dev
访问http://localhost:8080/hello/cent
,返回如下:
image.png
至此,一个简单的基于Quarkus框架的Restful服务已经搭建好了,好像跟Spring Boot比较,除了启动方式,其它没太大差别哦?下面才是差异的地方。
Quarkus定位是一个Native Java的框架,那么怎样将项目构建成Native应用呢?只需要两个步骤:
pom.xml
中增加构建profile配置,如下:
native
io.quarkus
quarkus-maven-plugin
${quarkus.version}
native-image
true
mvn package -Pnative
命令构建Native Image,构建完成后,target目录下会存在一个名字为[project name]-runner
的文件,这个就是应用的可执行文件,你可以拷贝到其它目录运行,运行如下:
./quarkus-simple-example-1.0-SNAPSHOT-runner
2019-05-15 12:02:31,199 INFO [io.quarkus] (main) Quarkus 0.14.0 started in 0.012s. Listening on: http://[::]:8080
2019-05-15 12:02:31,201 INFO [io.quarkus] (main) Installed features: [cdi, resteasy]
上面仅仅是Quarkus的一个简单示例,搭建一个Restful服务并构建成Native Image。完成这一步之后,你还可以将Native Image构建成Docker镜像并使用Kubernetes进行部署,后面的步骤与Spring Boot应用构建和发布没太大差异,在本文就不说了。
Quarkus目前还是一个很轻量级的框架,使用简单且启动超快,希望后续版本演进能够保持足够的轻量,如果变得像Spring全家桶那么庞大,估计启动也快不了了~
作者:centychen
链接:https://www.jianshu.com/p/e490043cc3eb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。