日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Quarkus入门

發(fā)布時間:2023/12/3 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quarkus入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Quarkus – 一個為OpenJDK HotSpot和GraalVM量身定制的Kubernetes本機Java堆棧,它是從最佳Java庫和標準中精制而成的。 –是一個容器優(yōu)先的框架,針對快速啟動時間和低內(nèi)存消耗進行了優(yōu)化。 該框架基于許多流行的Java庫構(gòu)建,并且為構(gòu)建標準REST以及響應(yīng)式和消息驅(qū)動型微服務(wù)提供支持。 由于快速的啟動時間和較低的內(nèi)存使用量,Quarkus還可以用于在無服務(wù)器環(huán)境中實現(xiàn)功能。 憑借統(tǒng)一的配置,出色的實時重新加載功能和工具支持,Quarkus為快速開發(fā)應(yīng)用程序提供了許多可能性。

了解如何開始使用Quarkus和構(gòu)建PetClinic REST API。

這篇博客文章涵蓋:

  • 開發(fā)環(huán)境要求
  • 建立新專案
  • 使用Java 11開發(fā),構(gòu)建和運行應(yīng)用程序
  • 使用Postgres和Flyway進行數(shù)據(jù)源配置
  • 分頁CRUD服務(wù)
  • 創(chuàng)建集成測試
  • 實時重新加載和調(diào)試
  • Docker化應(yīng)用程序(本機和非本機)

關(guān)于PetClinic API

我決定重新使用在本博客文章Spring Boot和Spring Data REST中使用的PetClinic模型。

基本上,這是一個基本的CRUD服務(wù),用于管理虛構(gòu)的PetClinic:寵物,獸醫(yī),來訪等。

先決條件

碼頭工人

Docker將用于運行服務(wù)本身的dockerized版本,但也將用于運行PostgreSQL服務(wù)器。

帶有GraalVM的JDK 11

PetClinic API將使用Java 11構(gòu)建,因此必須安裝JDK 11。 為了構(gòu)建本機可執(zhí)行文件,必須提供GraalVM 19.3+,并且由于它是基于OpenJDK 11構(gòu)建的,因此這將是本教程的最佳選擇。 安裝(和管理多個版本)Java SDK的最簡單方法是使用SDKMAN!

了解如何使用SDKMAN管理多個Java SDK! 輕松

要支持本機映像,請確保安裝所有必需的依賴項。 可以在GraalVM文檔中找到更多信息: https ://www.graalvm.org/docs/reference-manual/native-image/

GraalVM官方文檔: GraalVM

終奌站

該服務(wù)是使用iTerm2和oh-my-zsh在macOS上開發(fā)的。 我還將httpie用作默認的HTTP客戶端。

IntelliJ

我首選的IDE是IntelliJ,我在從事此項目時就使用了它。

在本文中了解有關(guān)我在macOS上使用的工具的更多信息: macOS:(Java)開發(fā)人員的基本工具

使用Docker運行PostgreSQL

該應(yīng)用程序?qū)⑦B接到Postgres服務(wù)器,并根據(jù)配置文件( dev , test , prod )應(yīng)用不同的配置。 為此,我們將需要運行三臺服務(wù)器:每臺服務(wù)器具有不同的數(shù)據(jù)庫名稱,端口和憑據(jù)。 為了簡化設(shè)置,可以使用Docker。

開發(fā)數(shù)據(jù)庫

  • 創(chuàng)建并運行容器:
$ docker run --name petclinic-db-dev -p 5433 : 5432 -e POSTGRES_DB=petclinic-dev -e POSTGRES_USER=petclinic-dev -e POSTGRES_PASSWORD=petclinic-dev -d postgres:alpine
  • 運行先前停止的容器:
$ docker start petclinic-db-dev

測試數(shù)據(jù)庫

  • 創(chuàng)建并運行容器:
$ docker run --name petclinic-db-test -p 5434 : 5432 -e POSTGRES_DB=petclinic-test -e POSTGRES_USER=petclinic-test -e POSTGRES_PASSWORD=petclinic-test -d postgres:alpine
  • 運行先前停止的容器:
$ docker start petclinic-db-test

產(chǎn)品數(shù)據(jù)庫

  • 創(chuàng)建并運行容器:
$ docker run --name petclinic-db -p 5432 : 5432 -e POSTGRES_DB=petclinic -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -d postgres:alpine
  • 運行先前停止的容器:
$ docker start petclinic-db

入門

引導(dǎo)應(yīng)用程序

您可以在命令行中使用Maven引導(dǎo)應(yīng)用程序,也可以使用在線生成器。 在線生成器允許探索可以構(gòu)成Quarkus應(yīng)用程序的擴展和技術(shù),并且不需要本地Maven安裝。 您可以在此處訪問生成器: https : //code.quarkus.io

需要以下擴展來構(gòu)建PetClinic API服務(wù):

  • RESTEasy JAX-RS –實現(xiàn)JAX-RS等的REST框架
  • RESTEasy Jackson –對RESTEasy的Jackson序列化支持
  • SmallRye OpenAPI –使用OpenAPI記錄您的REST API – Swagger UI隨附
  • 帶有Panache的Hibernate ORM –在帶有Panache的Hibernate ORM中定義持久性模型
  • Hibernate Validator –驗證進入您的REST端點的數(shù)據(jù)
  • JDBC驅(qū)動程序– PostgreSQL – PostgreSQL數(shù)據(jù)庫連接器
  • Flyway –處理數(shù)據(jù)庫架構(gòu)遷移

選擇依賴項后,您可以下載zip,解壓縮并開始開發(fā)服務(wù)。

下載的項目具有標準的Maven項目布局。 它包含Maven包裝器,因此不需要本地Maven安裝即可開發(fā)項目。 您還將注意到src/main/docker與本地和JVM映像的Docker文件一起。

主要配置文件application.properties位于src/main/resources 。 此文件夾還包含META-INF/resources文件夾,用于存儲應(yīng)用程序的靜態(tài)資源,例如index.html文件。

在線生成器默認情況下使用Java 8生成項目,因此,要使用Java 11,需要進行一些調(diào)整。

  • 在生成的項目的pom.xml中,更改Java版本:
< maven.compiler.source >11</ maven.compiler.source > < maven.compiler.target >11</ maven.compiler.target >
  • 在src/main/docker/Dockerfile.jvm設(shè)置ARG JAVA_PACKAGE=java-11-openjdk-headless

在開發(fā)模式下運行項目

進行更改后,您可以啟動應(yīng)用程序。 打開終端,導(dǎo)航到項目的文件夾并運行以下命令:

$ ./mvnw compile quarkus:dev

注意:Quarkus具有三種內(nèi)置模式: dev , test和prod取決于您如何運行應(yīng)用程序。

在IntelliJ中開發(fā)

在IntelliJ中,您只需打開項目的文件夾或pom.xml 。 ( File > Open )。 該項目只能使用Maven啟動。 這可以通過Maven運行配置來完成,因為沒有主類可以啟動應(yīng)用程序,例如在Spring Boot中 。

對我來說,使用Quarkus進行開發(fā)時最好的體驗是在IntelliJ外部的終端中運行應(yīng)用程序時。

調(diào)試

當(dāng)以開發(fā)模式執(zhí)行Quarkus應(yīng)用程序時,它將以啟用的調(diào)試協(xié)議(在端口5005上)啟動。 要在IntelliJ中調(diào)試Quarkus應(yīng)用程序,您需要通過Run > Attach to Process調(diào)試器附加到正在Run > Attach to Process 。 我沒有調(diào)試應(yīng)用程序的麻煩。

注意:可以在禁用調(diào)試的開發(fā)模式下運行該應(yīng)用程序: ./mvnw quarkus:dev -Ddebug=false ,但老實說,默認情況下啟用調(diào)試器時,我沒有發(fā)現(xiàn)任何性能問題。

實時重載

我認為,實時重新加載是Quarkus最強大的功能。 效果驚人。 基本上,您可以更改源代碼中所需的任何內(nèi)容,執(zhí)行請求,然后眨眼間即可重新加載應(yīng)用程序。 我正在重新整理類和程序包,移動文件,添加和刪除端點,而所有這些操作都沒有一次重啟。

數(shù)據(jù)源配置

所有屬性都轉(zhuǎn)到src/main/resources/application.properties 。

默認數(shù)據(jù)源屬性(

quarkus.datasource.url=jdbc:postgresql: //localhost:5432/petclinic quarkus.datasource.driver=org.postgresql.Driver quarkus.datasource.username=petclinic quarkus.datasource.password=petclinic

Dev數(shù)據(jù)源屬性(

要設(shè)置模式(或配置文件)的特定屬性,請使用%mode :

%dev.quarkus.datasource.url=jdbc:postgresql: //localhost:5433/petclinic-dev %dev.quarkus.datasource.username=petclinic-dev %dev.quarkus.datasource.password=petclinic-dev

測試數(shù)據(jù)源屬性(

%test.quarkus.datasource.url=jdbc:postgresql: //localhost:5434/petclinic-test %test.quarkus.datasource.username=petclinic-test %test.quarkus.datasource.password=petclinic-test

另請參閱: https : //quarkus.io/guides/datasource

飛路遷移

要使用Flyway,請在src/main/resources創(chuàng)建db/migration文件夾,然后添加遷移文件。 我的第一個遷移文件稱為V1.0.0__PetClinic.sql ,其中包含該服務(wù)的所有架構(gòu)(DDL)和示例數(shù)據(jù)。

注意:Quarkus支持可以通過quarkus.hibernate-orm.sql-load-script為每個配置文件配置的SQL導(dǎo)入,但是我無法使其工作。 請參閱我在Github上報告的問題: https : //github.com/quarkusio/quarkus/issues/7358

另請參閱: https : //quarkus.io/guides/flyway

JPA實體

PetClinic的域模型相對簡單,但是它包含一些單向和雙向關(guān)聯(lián)以及基本繼承,這使其比簡單的Hello World類型的模型要好一些。

請注意,在此示例中,JPA實體由相應(yīng)的Panache存儲庫直接在JAX-RS資源中返回(請參見下文),因此,實體類包含JPA和Jackson批注的混合。

例如:

@Entity @Table (name = "visits" ) public class Visit extends BaseEntity { @Column (name = "visit_date" ) @JsonFormat (pattern = "yyyy/MM/dd HH:mm" ) private LocalDateTime date; @NotEmpty @Column (name = "description" ) private String description; @ManyToOne @JoinColumn (name = "pet_id" ) private Pet pet; @ManyToOne @JoinColumn (name = "vet_id" ) private Vet vet; public Visit() { this .date = LocalDateTime.now(); } } @Entity @Table (name = "vets" , uniqueConstraints = @UniqueConstraint (columnNames = { "first_name" , "last_name" }) ) public class Vet extends Person { @ManyToMany (fetch = FetchType.EAGER) @JoinTable (name = "vet_specialties" , joinColumns = @JoinColumn (name = "vet_id" ), inverseJoinColumns = @JoinColumn (name = "specialty_id" )) @JsonIgnore private Set<Specialty> specialties; @OneToMany (cascade = CascadeType.ALL, mappedBy = "vet" , fetch = FetchType.EAGER) @JsonIgnore private Set<Visit> visits; }

所有實體都位于pl.codeleak.samples.petclinic.model包中。

休眠ORM與Panache

如果您熟悉Spring,我想您已經(jīng)聽說過Spring Data項目。 在我看來, 帶有Panache的Hibernate ORM具有類似的目標:通過消除重復(fù)和繁瑣的工作,簡化了JPA的開發(fā)。 Panache支持排序,分頁, java.util.Optional和java.utitl.stream.Stream等。

你有兩種方法來工作,以耀目:與創(chuàng)建實體PanacheEntity或創(chuàng)建庫PanacheRepository 。 我在這個項目中嘗試了兩種方法,但是由于實體中的繼承問題,我決定采用老式方法。

Hibernate ORM和Panache的基本存儲庫定義:

public class OwnerRepository implements PanacheRepository<Owner> { List<Owner> findByLastName(String lastName) { return list( "lastName" , lastName); } }

所有存儲庫都位于pl.codeleak.samples.petclinic.repository包中。

另請參閱: https : //quarkus.io/guides/hibernate-orm-panache

創(chuàng)建REST API

JAX-RS資源

Quarkus將JAX-RS與RESTEasy結(jié)合使用。 要創(chuàng)建API端點,我們需要創(chuàng)建JAX-RS資源:

@Path (OwnerResource.RESOURCE_PATH) @Produces (MediaType.APPLICATION_JSON) public class OwnerResource { public static final String RESOURCE_PATH = "/owners" ; @Context UriInfo uriInfo; @Inject OwnerRepository ownerRepository; @Inject PetRepository petRepository; @GET public Response getAll( @BeanParam PageRequest pageRequest) { ????????} @GET @Path ( "{id}" ) public Response getOne( @PathParam ( "id" ) Long id) { } @GET @Path ( "{id}/pets" ) public List<Pet> getPets( @PathParam ( "id" ) Long id) { ????} @POST @Consumes (MediaType.APPLICATION_JSON) @Transactional public Response create( @Valid Owner owner) { ????} }

依賴注入是通過CDI完成的–上下文和依賴注入 。 資源對象將由Quarkus自動配置。 必須將所有其他依賴項配置為具有CDI批注的依賴項注入。

例如,可以使用@ApplicationScoped注釋存儲庫,然后使用@Inject注入存儲庫:

@ApplicationScoped public class OwnerRepository implements PanacheRepository<Owner> { List<Owner> findByLastName(String lastName) { return list( "lastName" , lastName); } } @ApplicationScoped public class PetRepository implements PanacheRepository<Pet> { }

所有資源都位于pl.codeleak.samples.petclinic.api包中。

另請參閱: https : //quarkus.io/guides/cdi-reference

分頁

如前所述,Panache為分頁結(jié)果提供支持。 我們可以輕松地在我們的資源中輕松利用它:

@GET public Response getAll( @BeanParam PageRequest pageRequest) { return Response.ok(((PanacheRepository) petRepository).findAll() .page(Page.of(pageRequest.getPageNum(), pageRequest.getPageSize())) .list()).build(); }

PageRequest是一個包含pageNum和pageSize查詢參數(shù)的bean:

public class PageRequest { @QueryParam ( "pageNum" ) @DefaultValue ( "0" ) private int pageNum; @QueryParam ( "pageSize" ) @DefaultValue ( "10" ) private int pageSize; }

使用httpie可以輕松完成執(zhí)行分頁的請求:

$ http get : 8080 /owners pageNum== 0 pageSize== 2 HTTP/ 1.1 200 OK Content-Length: 250 Content-Type: application/json [ { "address" : "110 W. Liberty St." , "city" : "Madison" , "firstName" : "George" , "id" : 1 , "lastName" : "Franklin" , "telephone" : "6085551023" }, { "address" : "638 Cardinal Ave." , "city" : "Sun Prairie" , "firstName" : "Betty" , "id" : 2 , "lastName" : "Davis" , "telephone" : "6085551749" } ]

交易次數(shù)

在JPA中創(chuàng)建新對象需要活動事務(wù)。 為了將事務(wù)綁定到資源對象中的當(dāng)前方法,請使用@Transactional ,否則在方法執(zhí)行期間將引發(fā)異常:

@POST @Consumes (MediaType.APPLICATION_JSON) @Transactional public Response create( @Valid Owner owner) { ownerRepository.persist(owner); var location = uriInfo.getAbsolutePathBuilder() .path( "{id}" ) .resolveTemplate( "id" , owner.getId()) .build(); return Response.created(location).build(); }

使用httpie創(chuàng)建新資源:

$ http post : 8080 /owners <<< ' { "address" : "110 W. Liberty St." , "city" : "Madison" , "firstName" : "George" , "lastName" : "Franklin" , "telephone" : "6085551023" }' HTTP/ 1.1 201 Created Content-Length: 0 Location: http: //localhost:8080/owners/1042

驗證方式

該項目使用Hibernate Validator擴展。 使用此擴展,您可以使用標準的Hibernate驗證注釋(例如@NotBlank ),并且當(dāng)資源方法的輸入?yún)?shù)使用@Valid注釋時,驗證將自動觸發(fā),并且錯誤響應(yīng)將返回給調(diào)用該方法的客戶端。

以下請求的示例響應(yīng):

$ http post : 8080 /owners <<< '{}' HTTP/ 1.1 400 Bad Request Content-Length: 626 Content-Type: application/json validation-exception: true { "classViolations" : [], "exception" : null , "parameterViolations" : [ { "constraintType" : "PARAMETER" , "message" : "must not be empty" , "path" : "create.owner.address" , "value" : "" }, ????????... { "constraintType" : "PARAMETER" , "message" : "must not be empty" , "path" : "create.owner.telephone" , "value" : "" } ], "propertyViolations" : [], "returnValueViolations" : [] }

關(guān)于實時重新加載功能的注意事項:您可以對源代碼進行任何更改,并使用httpie執(zhí)行新請求。 該應(yīng)用程序快速重新加載,您會立即獲得結(jié)果。 無需重新啟動。

另請參閱: https : //quarkus.io/guides/validation

Java 8日期和時間支持

RESTEasy Jackson擴展位于項目中時,在JSON序列化和反序列化期間支持java.util.time類型。

在以下示例中,訪問日期以@JsonFormat批注提供的格式進行序列化和反序列化:

@Entity @Table (name = "visits" ) public class Visit extends BaseEntity { @Column (name = "visit_date" ) @JsonFormat (pattern = "yyyy/MM/dd HH:mm" ) private LocalDateTime date; }

檢查如何使用htppie序列化日期:

$ http get : 8080 /visits/ 1 HTTP/ 1.1 200 OK Content-Length: 174 Content-Type: application/json { "date" : "2013/01/01 00:00" , "description" : "rabies shot" , "id" : 1 , "pet" : { "birthDate" : "2012/09/04" , "id" : 7 , "name" : "Samantha" }, "vet" : { "firstName" : "Helen" , "id" : 2 , "lastName" : "Leary" } }

您還可以使用所需的日期時間格式將訪問存儲在請求正文中:

$ http post : 8080 /visits <<< ' { "date" : "2020/01/01 00:00" , "description" : "lorem ipsum" , "pet" : { "id" : 7 }, "vet" : { "id" : 2 } }' HTTP/ 1.1 201 Created Content-Length: 0 Location: http: //localhost:8080/visits/1042

OpenAPI / Swagger支持

SmallRye OpenAPI擴展負責(zé)提供API文檔,并且在開發(fā)模式下啟用了SwaggerUI。

默認端點是:

  • OpenAPI文檔– /openapi
  • SwaggerUI – /swaggerui

另請參閱: https : //quarkus.io/guides/openapi-swaggerui

整合測試

Quarkus使用JUnit 5和RESTAssured進行集成測試。 可以使用@QuarkusTest批注創(chuàng)建test ,并且默認情況下會在激活test配置文件的情況下執(zhí)行test 。

@QuarkusTest public class PetResourceTest { @Test public void pagedList() { given() .when().get( "/pets?pageNum=0&pageSize=2" ) .then() .statusCode( 200 ) .body( "$.size()" , is( 2 ), "name" , containsInAnyOrder( "Leo" , "Basil" ) ); } }

Quarkus測試要求應(yīng)用程序正在運行。 通過使用CDI @Alternate beans定義,可以替換測試中的選定bean。 備用bean必須放置在src/test/java 。

注意:由于有了配置文件支持,您可以使用單獨的數(shù)據(jù)庫容器輕松配置test配置文件的數(shù)據(jù)源。 請參閱測試數(shù)據(jù)源屬性 。

另請參閱: https : //quarkus.io/guides/getting-started-testing

打包并運行應(yīng)用程序

該應(yīng)用程序可以打包為./mvnw package 。

它在/target目錄中生成可執(zhí)行文件quarkus-petclinic-api-1.0.0-runner.jar文件,并將依賴項復(fù)制到target/lib目錄中。

[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /Users/rafal.borowiec/Projects/quarkus/quarkus-petclinic-api/target/quarkus-petclinic-api- 1.0 . 0 -runner.jar [INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 1888ms [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15.868 s [INFO] Finished at: 2020 - 02 -23T19: 18 : 25 + 01 : 00 [INFO] ------------------------------------------------------------------------

現(xiàn)在可以使用java -jar target/quarkus-petclinic-api-1.0.0-runner.jar運行該應(yīng)用程序。

2020 - 02 - 23 19 : 19 : 10 , 169 INFO [io.quarkus] (main) quarkus-petclinic-api 1.0 . 0 (running on Quarkus 1.2 . 1 .Final) started in 2 .011s. Listening on: http: .011s. Listening on: http: //0.0.0.0:8080 .011s. Listening on: http: //0.0.0.0:8080 2020 - 02 - 23 19 : 19 : 10 , 171 INFO [io.quarkus] (main) Profile prod activated. 2020 - 02 - 23 19 : 19 : 10 , 171 INFO [io.quarkus] (main) Installed features: [agroal, cdi, flyway, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, rest-client, resteasy, resteasy-jackson, smallrye-openapi]

注意: uber-jar可以與./mvnw clean package -DskipTests=true -Dquarkus.package.uber-jar=true一起打包。

創(chuàng)建以JVM模式運行應(yīng)用程序的Docker容器

$ ./mvnw clean package $ docker build -f src/main/docker/Dockerfile.jvm -t quarkus/petclinic-api-jvm . Successfully built 1a5d963fedfa Successfully tagged quarkus/petclinic-api-jvm:latest

使用鏈接運行容器,執(zhí)行Postgres數(shù)據(jù)庫容器,并使用環(huán)境變量覆蓋數(shù)據(jù)源url:

$ docker run -i --rm -p 8080 : 8080 --link petclinic-db -e QUARKUS_DATASOURCE_URL= 'jdbc:postgresql://petclinic-db/petclinic' quarkus/petclinic-api-jvm 2020 - 02 - 23 20 : 39 : 18 , 949 INFO [io.quarkus] (main) quarkus-petclinic-api 1.0 . 0 (running on Quarkus 1.2 . 1 .Final) started in 3 .475s. Listening on: http: .475s. Listening on: http: //0.0.0.0:8080 .475s. Listening on: http: //0.0.0.0:8080 2020 - 02 - 23 20 : 39 : 18 , 949 INFO [io.quarkus] (main) Profile prod activated. 2020 - 02 - 23 20 : 39 : 18 , 949 INFO [io.quarkus] (main) Installed features: [agroal, cdi, flyway, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, rest-client, resteasy, resteasy-jackson, smallrye-openapi

注意: petclinic-db是在此處創(chuàng)建的Postgres容器的名稱: Prod database 。 我們還需要傳遞數(shù)據(jù)源URL。 閱讀有關(guān)在運行時覆蓋配置屬性的更多信息:在運行時覆蓋屬性

創(chuàng)建本機可執(zhí)行文件

您可以使用以下命令創(chuàng)建本機可執(zhí)行文件:

$ ./mvnw package -Pnative [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building image from /Users/rafal.borowiec/Projects/quarkus/quarkus-petclinic-api/target/quarkus-petclinic-api- 1.0 [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /Users/rafal.borowiec/Projects/quarkus/quarkus-petclinic-api/target/quarkus-petclinic-api- . 0 - native -image-source-jar/quarkus-petclinic-api- 1.0 . 0 -runner.jar ... [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (typeflow): 72 , 535.72 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (objects): 49 , 325.68 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (features): 3 , 115.04 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] analysis: 135 , 220.10 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (clinit): 1 , 966.77 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] universe: 6 , 919.51 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (parse): 13 , 679.33 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (inline): 18 , 193.40 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] (compile): 70 , 849.75 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] compile: 111 , 062.75 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] image: 8 , 843.46 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] write: 1 , 789.58 ms [quarkus-petclinic-api- 1.0 . 0 -runner: 50503 ] [total]: 282 , 727.03 ms [INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 287304ms [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 04 : 58 min [INFO] Finished at: 2020 - 02 -23T19: 25 : 10 + 01 : 00 [INFO] ------------------------------------------------------------------------

創(chuàng)建本機可執(zhí)行文件的過程需要花費一些時間,但是值得等待它完成以查看應(yīng)用程序的啟動時間:

$ ./target/quarkus-petclinic-api- 1.0 . 0 -runner 2020 - 02 - 23 19 : 26 : 03 , 959 INFO [io.quarkus] (main) quarkus-petclinic-api 1.0 . 0 (running on Quarkus 1.2 . 1 .Final) started in 0 .066s. Listening on: http: .066s. Listening on: http: //0.0.0.0:8080 .066s. Listening on: http: //0.0.0.0:8080 2020 - 02 - 23 19 : 26 : 03 , 959 INFO [io.quarkus] (main) Profile prod activated. 2020 - 02 - 23 19 : 26 : 03 , 959 INFO [io.quarkus] (main) Installed features: [agroal, cdi, flyway, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, rest-client, resteasy, resteasy-jackson, smallrye-openapi]

本機可執(zhí)行文件啟動為0.67秒,而JVM版本為2秒。

創(chuàng)建一個以純模式運行應(yīng)用程序的Docker容器

默認情況下,本機可執(zhí)行文件以操作系統(tǒng)支持的格式創(chuàng)建。 由于容器使用的可執(zhí)行文件格式可能與操作系統(tǒng)生成的格式不同,因此Maven構(gòu)建可以從容器內(nèi)部生成可執(zhí)行文件:

$ ./mvnw package -Pnative -Dquarkus. native .container-build= true

要調(diào)整構(gòu)建器映像的版本,您需要設(shè)置quarkus.native.builder-image屬性:

$ ./mvnw clean package -Pnative -DskipTests= true -Dquarkus. native .container-build= true -Dquarkus. native .builder-image=quay.io/quarkus/ubi-quarkus- native -image: 20.0 . 0 -java11

現(xiàn)在,構(gòu)建并運行容器:

$ docker build -f src/main/docker/Dockerfile. native -t quarkus/petclinic-api . $ docker run -i --rm -p 8080 : 8080 quarkus/petclinic-api

注意:有關(guān)構(gòu)建本機可執(zhí)行文件的更多信息,請參見Quarkus文檔: https ://quarkus.io/guides/building-native-image

源代碼

可以在Github上找到本文的源代碼: https : //github.com/kolorobot/quarkus-petclinic-api

翻譯自: https://www.javacodegeeks.com/2020/02/getting-started-with-quarkus.html

總結(jié)

以上是生活随笔為你收集整理的Quarkus入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。