Quarkus β€” свСрхзвуковая субатомная Java. ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°

Quarkus — свСрхзвуковая субатомная Java. ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

БСдьмого ΠΌΠ°Ρ€Ρ‚Π° компания RedHat (вскорС β€” IBM) прСдставила Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ β€” Quarkus. По словам Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ базируСтся Π½Π° GraalVM ΠΈ OpenJDK HotSpot ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Kubernetes. Π‘Ρ‚Π΅ΠΊ Quarkus Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ЦСль создания β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Java Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ для развСртывания Π² Kubernetes ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ serverless ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠ°ΠΊ Π² Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ стилС.

Если ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° эту ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², Ρ‚ΠΎ Quarkus Π³Π΄Π΅-Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ «Aggregators/Code Generators» ΠΈ «High-level fullstack frameworks». Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ большС, Ρ‡Π΅ΠΌ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΈ Π΄ΠΎ full-stack Π½Π΅ дотягиваСт, Ρ‚.ΠΊ. Π·Π°Ρ‚ΠΎΡ‡Π΅Π½ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ backend.

ΠžΠ±Π΅Ρ‰Π°Π½Π° ΠΎΡ‡Π΅Π½ΡŒ высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска прилоТСния ΠΈ нСбольшой расход памяти. Π’ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ с сайта Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°:

ВрСмя ΠΎΡ‚ старта Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° (с):

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти (Mb):

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Π’ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰Π΅, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

*Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± этом стСкС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ я Π½Π΅ нашСл, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Spring Boot с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ обвСсом.

Hello World!

Π‘Π°ΠΌΠΎΠ΅ простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написанноС Π½Π° 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! Quarkus ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ hot reload, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ пСрСзапуская Π΅Π³ΠΎ, Ρ‚Π΅ΠΌ самым Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° становится Π΅Ρ‰Ρ‘ быстрСС.

Π§Ρ‚ΠΎ дальшС? МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сСрвис Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Inject. Код сСрвиса:

@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 ΠΈ стандартныС JPA Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для сущностСй. Как ΠΈ Π² случаС с REST ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΊΠΎΠ΄Π°. Достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ зависимости Π² Ρ„Π°ΠΉΠ»Π΅ сборки, Ρ€Π°ΡΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Entity ΠΈ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ datasource Π² application.properties.

ВсС. Никаких sessionFactory, persistence.xml ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… сСрвисных Ρ„Π°ΠΉΠ»ΠΎΠ². ПишСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½. Однако, ΠΏΡ€ΠΈ нСобходимости, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» persistence.xml ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ORM слой.

Quarkus ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сущностСй, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ запросов. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, выглядит Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π½ΠΎ это локальноС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Kubernetes. Π’.Π΅. кэши Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² Π½Π΅ синхронизированы ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π― надСюсь, это Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

АсинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, Quarkus ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования. Код ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅.

@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 + "!";
       });
   }
}

Асинхронный ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ пСрСнСсти Π² сСрвис, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅.

ВСстированиС

ВСсты для Quarkus-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° JUnit4 ΠΈΠ»ΠΈ JUnit5. НиТС Π΄Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСста для endpoint, ΠΎΠ½ написан ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ 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 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ пустого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½Π° сайтС Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Quarkus β€” Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сущСствуСт порядка 40 Ρ€Π°ΡΡˆΠΈΡ€Π΅ΠΉΠ½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Spring DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Apache Camel Π΄ΠΎ логгирования ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ для Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… сСрвисов. И ΡƒΠΆΠ΅ сущСствуСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ написания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Kotlin, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Java.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

По ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, Quarkus Π²ΠΏΠΎΠ»Π½Π΅ сСбС Π² Ρ‚Ρ€Π΅Π½Π΄Π°Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° backend ΠΊΠΎΠ΄Π° становится всС ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅, ΠΈ этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π΅Ρ‰Ρ‘ большС ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈ ускоряСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сСрвисов, добавляя β€œΡ€ΠΎΠ΄Π½ΡƒΡŽβ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Docker ΠΈ Kubernetes. ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ плюс β€” встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° GraalVM ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-зависимых ΠΎΠ±Ρ€Π°Π·ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ сСрвисы ΠΏΠΎ-настоящСму быстро ΡΡ‚Π°Ρ€Ρ‚ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ°Π»ΠΎ мСста Π² памяти. А это ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π² нашС врСмя массового увлСчСния микросСрвисами ΠΈ serverless Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт β€” quarkus.io. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² для быстрого старта ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π½Π° GitHub.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ