Quarkus แƒแƒ แƒ˜แƒก แƒ–แƒ”แƒ‘แƒ’แƒ”แƒ แƒ˜แƒ—แƒ˜ แƒกแƒฃแƒ‘แƒแƒขแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒฏแƒแƒ•แƒ. แƒฉแƒแƒ แƒฉแƒแƒก แƒ›แƒแƒ™แƒšแƒ” แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ

Quarkus แƒแƒ แƒ˜แƒก แƒ–แƒ”แƒ‘แƒ’แƒ”แƒ แƒ˜แƒ—แƒ˜ แƒกแƒฃแƒ‘แƒแƒขแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒฏแƒแƒ•แƒ. แƒฉแƒแƒ แƒฉแƒแƒก แƒ›แƒแƒ™แƒšแƒ” แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

XNUMX แƒ›แƒแƒ แƒขแƒก RedHat (แƒ›แƒแƒšแƒ” IBM) แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒฉแƒแƒ แƒฉแƒ - แƒ™แƒ•แƒแƒ แƒ™แƒฃแƒกแƒ˜. แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ—แƒฅแƒ›แƒ˜แƒ—, แƒ”แƒก แƒคแƒ แƒ”แƒ˜แƒ›แƒ”แƒ แƒ˜ แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GraalVM-แƒ–แƒ” แƒ“แƒ OpenJDK HotSpot-แƒ–แƒ” แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ Kubernetes-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. Quarkus แƒกแƒขแƒ”แƒ™แƒจแƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus แƒ“แƒ แƒกแƒฎแƒ•แƒ”แƒ‘แƒ˜.

แƒ›แƒ˜แƒ–แƒแƒœแƒ˜แƒ แƒฏแƒแƒ•แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒฌแƒแƒ›แƒงแƒ•แƒแƒœ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ Kubernetes-แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒฃแƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜แƒแƒœ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒแƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ แƒ”แƒแƒฅแƒขแƒ˜แƒฃแƒš, แƒ˜แƒกแƒ” แƒ˜แƒ›แƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒš แƒกแƒขแƒ˜แƒšแƒจแƒ˜.

แฒงแƒฃแƒ แƒ”แƒ‘แƒ แƒ”แƒก แƒฉแƒแƒ แƒฉแƒแƒ”แƒ‘แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ Quarkus แƒแƒ แƒ˜แƒก แƒกแƒแƒ“แƒฆแƒแƒช "Aggregators/Code Generators" แƒ“แƒ "High Level Fullstack Frameworks" แƒจแƒแƒ แƒ˜แƒก. แƒ”แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒ’แƒ แƒ”แƒ’แƒแƒขแƒแƒ แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒ แƒฃแƒš แƒกแƒขแƒ”แƒ™แƒกแƒแƒช แƒ™แƒ˜ แƒแƒ  แƒแƒฆแƒฌแƒ”แƒ•แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ... แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ backend แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒ“แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜แƒ“แƒแƒœ:

แƒ“แƒ แƒ แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒ“แƒแƒœ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒžแƒแƒกแƒฃแƒฎแƒแƒ›แƒ“แƒ”:

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ
แƒ“แƒแƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ
แƒ“แƒแƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ + JPA

Quarkus+GraalVM
0.014
0.055

Quarkus + OpenJDK
0.75
2.5

แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒ˜ Cloud Native Stack*
4.3
9.5

แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ (แƒ›แƒ‘):

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ
แƒ“แƒแƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ
แƒ“แƒแƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ + JPA

Quarkus+GraalVM
13
35

Quarkus + OpenJDK
74
130

แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒ˜ Cloud Native Stack*
140
218

แƒจแƒ—แƒแƒ›แƒ‘แƒ”แƒญแƒ“แƒแƒ•แƒ˜แƒ, แƒแƒ แƒ?

*แƒ›แƒ” แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒแƒ› แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒขแƒแƒ–แƒ”, แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ’แƒ•แƒแƒ แƒ˜ แƒกแƒแƒ’แƒแƒ–แƒแƒคแƒฎแƒฃแƒšแƒ แƒฉแƒ”แƒฅแƒ›แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒฎแƒ”แƒฃแƒšแƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ แƒ›แƒกแƒแƒคแƒšแƒ˜แƒ!

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

แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ’แƒแƒœ แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜! Quarkus แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒชแƒฎแƒ”แƒš แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก, แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ แƒแƒช แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒก.

แฒ แƒ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜? แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒก แƒแƒœแƒแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒœแƒ”แƒฅแƒชแƒ˜แƒ. แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

@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 แƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒงแƒแƒ แƒ application.properties-แƒจแƒ˜.

แƒงแƒ•แƒ”แƒšแƒ. แƒแƒ  แƒแƒ แƒ˜แƒก sessionFactory, persistence.xml แƒแƒœ แƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒฌแƒ”แƒ แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ“แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— persistence.xml แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— ORM แƒคแƒ”แƒœแƒ แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“.

Quarkus แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒ”แƒ แƒ—แƒ˜แƒ“แƒแƒœ แƒ‘แƒ”แƒ•แƒ แƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ•แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ”แƒ แƒ—แƒ˜ แƒ™แƒฃแƒ‘แƒ”แƒ แƒœแƒ”แƒขแƒ˜แƒก แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒ›แƒแƒ—. แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ. แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ”แƒก แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜แƒ.

แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ

แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒ, 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. แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜, แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ 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 แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ ะธ แƒแƒžแƒแƒฉแƒ˜แƒก แƒแƒฅแƒšแƒ”แƒ›แƒ˜ แƒจแƒ”แƒกแƒ•แƒšแƒแƒ›แƒ“แƒ” แƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒ“แƒ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ›แƒฎแƒแƒ แƒ˜ แƒ“แƒแƒฃแƒญแƒ˜แƒ แƒแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒ แƒแƒก แƒ™แƒแƒขแƒšแƒ˜แƒœแƒจแƒ˜, Java-แƒก แƒ’แƒแƒ แƒ“แƒ.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, Quarkus แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒ˜แƒ›แƒ“แƒ แƒแƒ˜แƒœแƒ“แƒ”แƒš แƒขแƒ”แƒœแƒ“แƒ”แƒœแƒชแƒ˜แƒ”แƒ‘แƒก. Backend แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒฃแƒคแƒ แƒ แƒ“แƒ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ”แƒก แƒฉแƒแƒ แƒฉแƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒก แƒ“แƒ แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒก Docker-แƒ˜แƒกแƒ แƒ“แƒ Kubernetes-แƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ แƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—. แƒฃแƒ–แƒแƒ แƒ›แƒแƒ–แƒแƒ แƒ˜ แƒžแƒšแƒฃแƒกแƒ˜แƒ GraalVM-แƒ˜แƒก แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒ“แƒ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒแƒ–แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒก แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒ“แƒ แƒ“แƒแƒ˜แƒ™แƒแƒ•แƒแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒแƒ“แƒ’แƒ˜แƒšแƒ˜. แƒ“แƒ แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒ—แƒ แƒ“แƒ แƒฃแƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒ— แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ’แƒแƒขแƒแƒชแƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒ“แƒ แƒแƒจแƒ˜.

แฒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ - quarkus.io. แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ GitHub.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ