Quarkus เปเบกเปˆเบ™ subatomic Java supersonic. เบžเบฒเบšเบฅเบงเบกเป‚เบ”เบเบซเบเปเป‰เบ‚เบญเบ‡เบเบญเบš

Quarkus เปเบกเปˆเบ™ subatomic Java supersonic. เบžเบฒเบšเบฅเบงเบกเป‚เบ”เบเบซเบเปเป‰เบ‚เบญเบ‡เบเบญเบš

เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เปƒเบ™เบงเบฑเบ™เบ—เบต XNUMX เบกเบตเบ™เบฒ, RedHat (เป„เบงเป†เบ™เบตเป‰ IBM) เบ™เบณ เบชเบฐ เป€เปœเบต เป‚เบ„เบ‡โ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เปƒเบซเบกเปˆ - เป‚เบ„เบ. เบญเบตเบ‡เบ•เบฒเบกเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบเบญเบšเบ™เบตเป‰เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆ GraalVM เปเบฅเบฐ OpenJDK HotSpot เปเบฅเบฐเบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบš Kubernetes. Quarkus stack เบ›เบฐเบเบญเบšเบกเบต: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰ Java เบเบฒเบเป€เบ›เบฑเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเบŠเบฑเป‰เบ™เบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Kubernetes เปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ‡เปƒเบ™เปเบšเบšเบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเปเบฅเบฐเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™.

เบŠเบญเบเบซเบฒเบขเบนเปˆ เบ™เบตเป‰ เบเบฒเบ™เบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบญเบšเบงเบฝเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Quarkus เปเบกเปˆเบ™เบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ "เบœเบนเป‰เบฅเบงเบšเบฅเบงเบก / เบœเบนเป‰เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”" เปเบฅเบฐ "เบเบญเบšเป€เบ•เบฑเบกเบŠเบฑเป‰เบ™เบชเบนเบ‡". เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเปเบฅเป‰เบง, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเป€เบ–เบดเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเป€เบ•เบฑเบก, เป€เบžเบฒเบฐเบงเปˆเบฒ ... เป€เบซเบกเบฒเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ backend.

เบ„เบงเบฒเบกเป„เบงเบชเบนเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เปˆเปเบฒเปเบกเปˆเบ™เบชเบฑเบ™เบเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ:

เป€เบงเบฅเบฒเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบฒเบ„เบณเบ•เบญเบšเบ—เบณเบญเบดเบ” (s):

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Cloud Native Stack เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก*
4.3
9.5

เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เป‚เบžเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒ (Mbโ€‹)โ€‹:

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Cloud Native Stack เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก*
140
218

เบ›เบฐเบ—เบฑเบšเปƒเบˆ, เบšเปเปˆเปเบกเปˆเบ™เบšเป?

*เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบŠเบญเบเบซเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบš stack เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ Spring Boot เบ—เบตเปˆเบกเบตเบŠเบธเบ”เบฎเปˆเบฒเบ‡เบเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก..

เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบŠเบฒเบงโ€‹เป‚เบฅเบ!

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ Quarkus เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบฎเบนเป‰โ€‹เบˆเบฑเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™โ€‹เปเบฅเบฐโ€‹เบžเบฝเบ‡โ€‹เบžเปโ€‹! เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป‚เบ”เบเปƒเบŠเป‰ Maven เปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ:

mvn compile quarkus:dev
โ€ฆ
$ curl http://localhost:8080/hello
hello

เบ„เบงเบฒเบกโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบˆเบฒเบโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เบกเบต Application class! Quarkus เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบซเบกเปˆเบฎเป‰เบญเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ restart เบกเบฑเบ™, เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบงเบ‚เบถเป‰เบ™.

เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปƒเบชเปˆเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบšเบฑเบ™เบเบฒเบ เบชเบฑเบ. เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

เบ•เบปเบงเบ„เบงเบšเบ„เบธเบก:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ Quarkus เปƒเบŠเป‰เบ„เปเบฒเบšเบฑเบ™เบเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบˆเบฒเบเบเบญเบšเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ - CDI เปเบฅเบฐ JAX-RS. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบฝเบ™เบฎเบนเป‰เบชเบดเปˆเบ‡เปƒเบซเบกเปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ„เบตเบเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš CDI เปเบฅเบฐ JAX-RS เบกเบฒเบเปˆเบญเบ™, เปเบ™เปˆเบ™เบญเบ™.

เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™

Hibernate เปเบฅเบฐ annotation JPA เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบ„เบงเบšเบ„เบธเบก REST, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆ. เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ›เบฐเบเบญเบš, เป€เบžเบตเปˆเบกเบ„เปเบฒเบšเบฑเบ™เบเบฒเบ @Entity เปเบฅเบฐเบเบณเบ™เบปเบ”เบ„เปˆเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ application.properties.

เบ—เบฑเบ‡เปเบปเบ”. เบšเปเปˆเบกเบต sessionFactory, persistence.xml เบซเบผเบทเป„เบŸเบฅเปŒเบšเปเบฅเบดเบเบฒเบ™เบญเบทเปˆเบ™เป†. เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ persistence.xml เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบŠเบฑเป‰เบ™ ORM เบฅเบฐเบญเบฝเบ”เบเบงเปˆเบฒ.

Quarkus เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบ–เบฒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹, เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบžเบปเบงโ€‹เบžเบฑเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบซเบฒโ€‹เบซเบผเบฒเบโ€‹, เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบชเบญเบšโ€‹เบ–เบฒเบกโ€‹. เบขเบนเปˆ glance เบ—เปเบฒเบญเบดเบ”เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ”เบต, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™ เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ caching, เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡ Kubernetes node. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. cache เบ‚เบญเบ‡ nodes เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบšเปเปˆเป„เบ”เป‰ synchronized เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™. เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบŠเบปเปˆเบงเบ„เบฒเบง.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ” Asynchronous

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, Quarkus เบเบฑเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก reactive. เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

เบฅเบฐเบซเบฑเบ” Asynchronous เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป‚เบญเบ™เป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เป„เบ”เป‰, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเบ„เบทเบเบฑเบ™.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Quarkus เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เปƒเบ™ JUnit4 เบซเบผเบท JUnit5. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”, เบกเบฑเบ™เบ–เบทเบเบ‚เบฝเบ™เป‚เบ”เบเปƒเบŠเป‰ RestAssured, เปเบ•เปˆเบเบญเบšเบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

เบ„เปเบฒเบšเบฑเบ™เบเบฒเบ @QuarkusTest เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเป€เบžเบฒเบฐเป€เบงเบ—เบต

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ Quarkus เบ–เบทเบเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เปเบซเบ™เป‰เบ™เบซเบ™เบฒเบเบฑเบš GraalVM, เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเบฐเป€เบžเบฒเบฐเป€เบงเบ—เบต. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡ GraalVM เปเบฅเบฐเบฅเบฐเบšเบธเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก GRAALVM_HOME. เบ•เบทเปˆเบกเบญเบตเบ เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบš เปเบฅเบฐเบฅเบฐเบšเบธเบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ:

mvn package -Pnative

เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰. เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ JVM. เบ„เปเบฒเบšเบฑเบ™เบเบฒเบ @SubstrateTest เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฐเป€เบžเบฒเบฐ. เบเบฒเบ™เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบชเบทเบšเบ—เบญเบ”; เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเป€เบงเบ—เบตเบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบซเบธเป‰เบกเบซเปเปˆเบขเบนเปˆเปƒเบ™ Docker เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™ Kubernetes เบซเบผเบท OpenShift, เบญเบฐเบ—เบดเบšเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปƒเบ™ เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ.

เป€เบ„เบทเปˆเบญเบ‡เบกเบท

เบเบญเบš Quarkus เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบš Maven เปเบฅเบฐ Gradle. Maven เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ, เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš Gradle. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ Gradle เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ; เบกเบตเบ‚เปเป‰เบกเบนเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ. เบ›เบทเป‰เบกเบฎเบฝเบ™.

Extensions

Quarkus เปเบกเปˆเบ™เบเบญเบšเบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡ 40 เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ, เป€เบŠเบดเปˆเบ‡เป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ•เปˆเบฒเบ‡เป† - เบˆเบฒเบเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ เบžเบฒเบเบฎเบฝเบ™ spring DI container ะธ Apache Camel เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเป€เบœเบตเบเปเบœเปˆ metrics เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบฅเปˆเบ™. เปเบฅเบฐเบกเบตเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™ Kotlin, เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบ Java.

เบชเบฐเบซเบฅเบธเบš

เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, Quarkus เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเปเบ™เบงเป‚เบ™เป‰เบกเบ‚เบญเบ‡เป€เบงเบฅเบฒ. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบซเบฑเบ” Backend เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™ เปเบฅเบฐเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เปเบฅเบฐเบเบญเบšเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™ เปเบฅเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบชเปเบฒเบฅเบฑเบš Docker เปเบฅเบฐ Kubernetes. เบšเบงเบเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบš GraalVM เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเป€เบงเบ—เบต, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปเบฅเบฐเปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบ™เป‰เบญเบ. เปเบฅเบฐเบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเปƒเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ‚เบญเบ‡ passion เบกเบฐเบซเบฒเบŠเบปเบ™เบชเปเบฒเบฅเบฑเบš microservices เปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ serverless.

เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบฒเบ‡โ€‹เบเบฒเบ™ - quarkus.io. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบงเปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปเบฅเป‰เบง GitHub.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™