一个简单的Quarkus web服务Demo
介绍
Quarkus是一个由Red Hat开源的 Java 微服务框架,其特性包括:
- 容器优先:最小的Java应用程序,最适合在容器中运行
- 云原生:在 Kubernetes 等环境中采用 12 要素原则。
- 统一命令式与反应式:在一个编程模型下带来非阻塞和命令式开发风格。
- 基于标准:基于一些标准和框架(RESTEasy、Hibernate、Netty、Eclipse Vert.x、Apache Camel …)。
- 微服务优先:快速启动项目编写 Java 应用。
根据2020年8月18日发布的《 2020 年微服务领域开源数字化报告》,Quarkus 作为云原生微服务框架,在微服务框架中活跃度排名第一,全球 GitHub 开源项目活跃度中排名 40,也具有着巨大的影响力。
虽然目前SpringBoot拥有着几乎不可动摇的地位,但对于其他的微服务框架,还是可以了解下的,下面就来看下如何使用Quarkus来构建一个web服务吧。
本示例项目代码已上传github,地址:https://github.com/mrKyleWang/quarkus-demo
构建项目
1. pom文件
注意,这里使用的是最新发行版本1.7.2.Final,要求:jdk 8 or 11+、maven 3.6.2+,可根据环境使用低版本quarkus
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>quarkus-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<quarkus.version>1.7.2.Final</quarkus.version>
</properties>
<dependencies>
<!-- 实现Rest web服务依赖 -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bom</artifactId>
<version>${quarkus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2. 应用配置
application.properties
文件
# http服务端口
quarkus.http.port=8081
# url根路径
quarkus.http.root-path=/
3. service声明
@ApplicationScoped
public class TestService {
public String hello() {
return "Hello!";
}
}
@ApplicationScoped
用于声明一个Bean,可用于其他类中依赖注入,类似Spring中的@Component
4. 接口声明及依赖注入
@Path("/test")
public class TestResource {
@Inject
TestService testService;
@GET
@Path("/hello")
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return testService.hello();
}
}
这里通过@Inject
注解将上一步中声明的TestService注入,类比@Autowired
的用法。
@Path
用于声明路径,@GET
表示接受get方法请求,@Produces
表示相应格式,这里是以普通文本格式,直接返回TestService中返回的字符串。
启动应用
使用quarkus-maven-plugin启动
使用命令:mvn quarkus:dev
启动
或直接通过idea插件列表启动
查看控制台
显示启动成功,并监听8081端口
测试接口
向127.0.0.1:8081/test/hello
发起get请求: