…
好记性不如烂笔头,————————————在我的小仓库。
介绍
Quarkus是专为无服务器应用程序交付而设计的一个全栈Kubernetes原生Java框架。它与流行的 Java 框架、标准和库(例如 Eclipse MicroProfile 和 Spring、Apache Kafka、Hibernate、Camel 等)一起使用。
Quarkus与SpringBoot的区别
Quarkus是一个新框架,与SpringBoot相比没有良好的文档、社区,遇到问题在web上很难找到关于Quarkus的相关解决办法,但是Quarkus比SpringBoot的启动速度要快很多。
阅读须知
- 建议安装一个IDE
- JDK11+,推荐GraalVM 版本
- Apache Maven 3.8.6
入门案例
使用 Maven 创建一个项目,当然也可以进入 quarkus官网 下载需要的依赖包或者在IDE中创建一个Quarkus工程(IDEA举例,若是使用IDEA 需要在插件中安装Quarkus的两个插件才可以使用Quarkus的功能)。
# 这里使用 Maven的方式构建
mvn io.quarkus.platform:quarkus-maven-plugin:2.10.2.Final:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-Dextensions="resteasy-reactive"
cd getting-started
- 配置完成后,新建一个HelloWorld类
@Path("/hello")
public class HelloWorld{
@Get // 对应 Spring Boot 的 @GetMapping
@Produces(MediaType.TEXT_PLAIN) // 返回视图类型,通常我们用 MediaType.APPLICATION_JSON
@Path("/{name}")
public String hello(String name){
return name;
}
}
- 测试
我们已经创建好了一个简单的REST类
这里将进行测试,新建一个HelloWorldTest测试类
package org.acme;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
@io.quarkus.test.junit.QuarkusTest
public class HelloWorldTest {
@Test
public void testHello(){
given()
.when()
.get("/hello/Ian")
.then()
.statusCode(200)
.body(containsString("Ian"));// is //检查 HTTP 响应状态代码和内容
}
}
最终可以看到测试通过。
Quarkus注解与SpringBoot对比
- @Path 相当于springboot 中 @RequestMapping
- @Produces 返回视图类型,通常我们用MediaType.APPLICATION_JSON
- @Get、@Post、@DELETE、@PUT 对应 @GetMapping、@PostMapping、@DeleteMapping、@PutMapping
- @ApplicationScoped注解相当于springboot中@component
- @Inject 相当于@Autowired
- @PathParam 相当于@PathVariable
- @ConfigProperty( name = “xx”) 此处的xx对应的是application.properties 中的xx 。用于赋值。
举例
- @Inject
定义一个HelloService类
@ApplicationScoped
public class HelloService {
public String hello(){
return "HelloService 的 Inject测试";
}
public String hello(String name){
return "HelloService 的 Inject测试\n传参:"+name;
}
}
之后在ExampleResource中加入实验
@Inject
HelloService helloService;
@GET
@Path("/helloSer")
@Produces(MediaType.APPLICATION_JSON)
public String helloServiceMethod(){
return helloService.hello();
}
@GET
@Path("/helloSer/{name}")
@Produces(MediaType.APPLICATION_JSON)
public String helloServiceMethod(String name){
return helloService.hello(name);
}
最后通过@Inject成功构建HelloService并且运行。
总结
- Quarkus 是一个新兴的Java开发平台,特点时响应式、云原生、高性能、低延时等等
- Quarkus 已经逐步完善,可以应用于生产。
- Quarkus基本也可以做到不需多么复杂的配置就可部署