先决条件
一个IDE
JDK 8或11+
Apache Maven 3.6.2+
创建项目
Linux和MacOS用户:mvnio.quarkus:quarkus-maven-plugin:1.13.2.Final:create\ -DprojectGroupId=org.acme \ -DprojectArtifactId=getting-started \ -DclassName="org.acme.getting.started.GreetingResource"\ -Dpath="/hello"Windows用户:mvnio.quarkus:quarkus-maven-plugin:1.13.2.Final:create-DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DclassName="org.acme.getting.started.GreetingResource"-Dpath="/hello"
生成以下内容 ./getting-started:
Maven结构
org.acme.getting.started.GreetingResource暴露于的资源/hello
相关的单元测试
http://localhost:8080启动应用程序后可访问的登录页面
和中的模式的示例Dockerfile文件nativejvmsrc/main/docker
应用程序配置文件
查看pom.xml。您将找到Quarkus BOM的导入,从而可以省略不同Quarkus依赖项上的版本。此外,您还可以看到quarkus-maven-plugin负责应用程序打包的人员,还可以提供开发模式
io.quarkusquarkus-universe-bom${quarkus.platform.version}pomimportio.quarkusquarkus-maven-plugin${quarkus-plugin.version}truebuildgenerate-codegenerate-code-tests
可以看到开发REST应用程序:
io.quarkusquarkus-resteasy
JAX-RS资源
一个非常简单的REST端点,向“ / hello”上的请求返回“ hello”
packageorg.acme.getting.started;importjavax.ws.rs.GET;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;@Path("/hello")public class GreetingResource {@GET@Produces(MediaType.TEXT_PLAIN) public String hello() {return"hello"; }}
使用Quarkus,无需创建Application类。它受支持,但不是必需的。另外,仅创建资源的一个实例,而不为每个请求创建一个。您可以使用不同的配置此*Scoped批注(ApplicationScoped,RequestScoped,等)。
运行应用程序
现在,我们准备运行我们的应用程序。使用方法./mvnw compile quarkus:dev:
$./mvnwcompilequarkus:dev[INFO]--------------------<org.acme:getting-started>---------------------[INFO]Buildinggetting-started1.0.0-SNAPSHOT[INFO]--------------------------------[jar]---------------------------------[INFO][INFO]---maven-resources-plugin:2.6:resources(default-resources)@getting-started---[INFO]Using'UTF-8'encodingtocopyfilteredresources.[INFO]skipnonexistingresourceDirectory/Users/starksm/Dev/JBoss/Quarkus/starksm64-quarkus-quickstarts/getting-started/src/main/resources[INFO][INFO]---maven-compiler-plugin:3.1:compile(default-compile)@getting-started---[INFO]Changesdetected-recompilingthemodule![INFO]Compiling2sourcefilesto/Users/starksm/Dev/JBoss/Quarkus/starksm64-quarkus-quickstarts/getting-started/target/classes[INFO][INFO]---quarkus-maven-plugin:<version>:dev(default-cli)@getting-started---Listening for transport dt_socket at address:50052019-02-2817:05:22,347INFO[io.qua.dep.QuarkusAugmentor](main)Beginningquarkusaugmentation2019-02-2817:05:22,635INFO[io.qua.dep.QuarkusAugmentor](main)Quarkusaugmentationcompletedin288ms2019-02-2817:05:22,770INFO[io.quarkus](main)Quarkus started in 0.668s. Listening on:http://localhost:80802019-02-2817:05:22,771INFO[io.quarkus](main)Installed features:[cdi,resteasy]
curl-w"\n"http://localhost:8080/hellohello
使用 注入
Quarkus中的依赖注入基于ArC,ArC是为Quarkus架构量身定制的基于CDI的依赖注入解决方案。如果您不熟悉CDI,建议您阅读CDI简介指南。
Quarkus仅实现CDI功能的一个子集,并具有非标准功能和特定的APIS,您可以在Contexts and Dependency Injection指南中了解有关它的更多信息。
ArC作为的依赖项,quarkus-resteasy因此您已经很方便了。
packageorg.acme.getting.started;importjavax.enterprise.context.ApplicationScoped;@ApplicationScopedpublicclassGreetingService{publicStringgreeting(String name){return"hello "+ name; }}
编辑GreetingResource该类以注入,GreetingService并使用它创建一个新的端点:packageorg.acme.getting.started;importjavax.inject.Inject;importjavax.ws.rs.GET;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;importorg.jboss.resteasy.annotations.jaxrs.PathParam;@Path("/hello")public class GreetingResource {@InjectGreetingService service;@GET@Produces(MediaType.TEXT_PLAIN) @Path("/greeting/{name}") public String greeting(@PathParam String name) {returnservice.greeting(name); }@GET@Produces(MediaType.TEXT_PLAIN) public String hello() {return"hello"; }}
编辑GreetingResource该类以注入,GreetingService并使用它创建一个新的端点:
开发模式
quarkus:dev在开发模式下运行Quarkus。这样可以通过后台编译实现热部署,这意味着当您修改Java文件和/或资源文件并刷新浏览器时,这些更改将自动生效。这对于资源文件(如配置属性文件)也适用。刷新浏览器会触发对工作区的扫描,如果检测到任何更改,将重新编译Java文件并重新部署应用程序;然后,重新部署的应用程序将为您的请求提供服务。如果编译或部署有任何问题,则会显示错误页面。
这还将在port上侦听调试器5005。如果要在运行之前等待调试器附加,可以-Dsuspend在命令行中传递。如果您根本不想使用调试器,则可以使用-Ddebug=false。
测试
在生成的pom.xml文件中,您可以看到2个测试依赖项:
io.quarkusquarkus-junit5testio.rest-assuredrest-assuredtest
Quarkus支持Junit 5测试。因此,必须设置Surefire Maven插件的版本,因为默认版本不支持Junit 5:
maven-surefire-plugin${surefire-plugin.version}org.jboss.logmanager.LogManager${maven.home}
我们还设置了java.util.logging系统属性,以确保测试将使用正确的logmanager,并maven.home确保${maven.home}/conf/settings.xml应用了from的自定义配置(如果有)。
生成的项目包含一个简单的测试。编辑
src/test/java/org/acme/getting/started/GreetingResourceTest.java以匹配以下内容:
packageorg.acme.getting.started;importio.quarkus.test.junit.QuarkusTest;importorg.junit.jupiter.api.Test;importjava.util.UUID;importstatic io.restassured.RestAssured.given;importstatic org.hamcrest.CoreMatchers.is;@QuarkusTestpublicclassGreetingResourceTest{@Testpublicvoid testHelloEndpoint() { given() .when().get("/hello") .then() .statusCode(200) .body(is("hello")); }@Testpublicvoid testGreetingEndpoint() { String uuid = UUID.randomUUID().toString(); given() .pathParam("name", uuid) .when().get("/hello/greeting/{name}") .then() .statusCode(200) .body(is("hello "+ uuid)); }}
通过使用运行QuarkusTest程序,您可以指示JUnit在测试之前启动应用程序。
检查HTTP响应状态代码和内容
可以使用Maven运行这些:
./mvnwtest
打包并运行应用程序
该应用程序使用打包./mvnw package。它产生以下几个输出/target:
getting-started-1.0.0-SNAPSHOT.jar-仅包含项目的类和资源,这是Maven构建产生的常规工件-它不是可运行的jar;
quarkus-app包含quarkus-run.jarjar文件的目录-是可执行jar。请注意,这不是über-jar,因为依赖项已复制到的子目录中quarkus-app/lib/。
您可以使用以下命令运行该应用程序: java -jar
target/quarkus-app/quarkus-run.jar
如果要将应用程序部署到某个地方(通常在容器中),则需要部署整个quarkus-app目录。
使用fast-jar
假定quarkus.package.type未明确配置配置属性,或者已将其设置为legacy-jar(在application.properties或任何其他受支持的配置源中)。当属性设置fast-jar为时(将在Quarkus 1.12中使用),执行的结果 ./mvnw package是targetnamed下的新目录quarkus-app。
您可以使用来运行该应用程序java -jar
target/quarkus-app/quarkus-run.jar。
为了成功运行产生的jar,您需要具有quarkus-app目录的全部内容。如果缺少任何文件,则该应用程序将无法启动或无法正常运行。
该fast-jar包装导致创建启动快一点,消耗略少的内存比遗留Quarkus罐子,因为它有哪些相关性JAR包含的类和资源索引信息,神器。因此,在加载类或资源时,它可以避免在旧版jar必需的类路径上查找潜在的每个jar。
配置标语
默认情况下,当Quarkus应用程序启动时(在常规或开发模式下),它将显示ASCII技术标语。横幅可以通过设置被禁用quarkus.banner.enabled=false的application.properties,通过设置-Dquarkus.banner.enabled=falseJava系统属性,或通过设置QUARKUS_BANNER_ENABLED环境变量false。此外,用户可以通过将标语文件放置在中src/main/resources并quarkus.banner.path=name-of-file在中进行配置来提供自定义标语application.properties。