เจ•เฉเจ†เจฐเจ•เจธ เจ‡เฉฑเจ• เจธเฉเจชเจฐเจธเฉ‹เจจเจฟเจ• เจ‰เจช-เจชเจฐเจฎเจพเจฃเฉ‚ เจœเจพเจตเจพ เจนเฉˆเฅค เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ€ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€

เจ•เฉเจ†เจฐเจ•เจธ เจ‡เฉฑเจ• เจธเฉเจชเจฐเจธเฉ‹เจจเจฟเจ• เจ‰เจช-เจชเจฐเจฎเจพเจฃเฉ‚ เจœเจพเจตเจพ เจนเฉˆเฅค เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ€ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€

เจœเจพเจฃ เจชเจ›เจพเจฃ

XNUMX เจฎเจพเจฐเจš เจจเฉ‚เฉฐ, RedHat (เจ›เฉ‡เจคเฉ€ เจนเฉ€ IBM) ะฟั€ะตะดัั‚ะฐะฒะธะปะฐ เจจเจตเจพเจ‚ เจซเจฐเฉ‡เจฎเจตเจฐเจ• - เจ•เจตเจพเจ•เจฐเจธ. เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจ‡เจน เจซเจฐเฉ‡เจฎเจตเจฐเจ• GraalVM เจ…เจคเฉ‡ OpenJDK HotSpot 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉˆ เจ…เจคเฉ‡ Kubernetes เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ•เฉเจ†เจฐเจ•เจธ เจธเจŸเฉˆเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเจจ: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus เจ…เจคเฉ‡ เจนเฉ‹เจฐเฅค

เจŸเฉ€เจšเจพ เจœเจพเจตเจพ เจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจคเฉˆเจจเจพเจคเฉ€ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจกเจฟเจตเฉˆเจฒเจชเจฎเฉˆเจ‚เจŸ เจฒเจˆ เจฎเฉ‹เจนเจฐเฉ€ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ, เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจคเฉ€เจ•เจฟเจฐเจฟเจ†เจธเจผเฉ€เจฒ เจ…เจคเฉ‡ เจฒเจพเจœเจผเจฎเฉ€ เจธเจผเฉˆเจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจตเจฟเจ•เจพเจธ เจฒเจˆ เจ‡เฉฑเจ• เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเฉ‹ เจ‡เจน เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเจพ เจตเจฐเจ—เฉ€เจ•เจฐเจจ, เจซเจฟเจฐ เจ•เฉเจ†เจฐเจ•เจธ เจ•เจฟเจคเฉ‡ โ€œเจเจ—เจฐเฉ€เจ—เฉ‡เจŸเจฐ/เจ•เฉ‹เจก เจœเจจเจฐเฉ‡เจŸเจฐโ€ เจ…เจคเฉ‡ โ€œเจ‰เฉฑเจš-เจชเฉฑเจงเจฐเฉ€ เจซเฉเฉฑเจฒเจธเจŸเฉˆเจ• เจซเจฐเฉ‡เจฎเจตเจฐเจ•โ€ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจนเฉˆเฅค เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เฉฑเจ• เจเจ—เจฐเฉ€เจ—เฉ‡เจŸเจฐ เจคเฉ‹เจ‚ เจตเฉฑเจง เจนเฉˆ, เจชเจฐ เจ‡เจน เจชเฉ‚เจฐเฉ‡-เจธเจŸเฉˆเจ• เจคเฉฑเจ• เจตเฉ€ เจจเจนเฉ€เจ‚ เจชเจนเฉเฉฐเจšเจฆเจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ... เจฌเฉˆเจ•เจเจ‚เจก เจตเจฟเจ•เจพเจธ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจพเจ‚เจš เจฆเฉ€ เจฌเจนเฉเจค เจคเฉ‡เจœเจผ เจ—เจคเฉ€ เจ…เจคเฉ‡ เจ˜เฉฑเจŸ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ–เจชเจค เจฆเจพ เจตเจพเจ…เจฆเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจน เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ€ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจนเฉˆ:

เจธเจผเฉเจฐเฉ‚เจ†เจค เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจชเจนเจฟเจฒเฉ‡ เจœเจตเจพเจฌ เจคเฉฑเจ• เจฆเจพ เจธเจฎเจพเจ‚:

เจ•เฉŒเจจเจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ
เจ†เจฐเจพเจฎ
REST+JPA

เจ•เฉเจ†เจฐเจ•เจธ+เจ—เฉเจฐเฉ‡เจฒเจตเฉ€เจเจฎ
0.014
0.055

เจ•เฉเจ†เจฐเจ•เจธ+เจ“เจชเจจเจœเฉ‡เจกเฉ€เจ•เฉ‡
0.75
2.5

เจฐเจตเจพเจ‡เจคเฉ€ เจ•เจฒเจพเจ‰เจก เจจเฉ‡เจŸเจฟเจต เจธเจŸเฉˆเจ•*
4.3
9.5

เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฆเฉ€ เจ–เจชเจค (Mb):

เจ•เฉŒเจจเจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ
เจ†เจฐเจพเจฎ
REST+JPA

เจ•เฉเจ†เจฐเจ•เจธ+เจ—เฉเจฐเฉ‡เจฒเจตเฉ€เจเจฎ
13
35

เจ•เฉเจ†เจฐเจ•เจธ+เจ“เจชเจจเจœเฉ‡เจกเฉ€เจ•เฉ‡
74
130

เจฐเจตเจพเจ‡เจคเฉ€ เจ•เจฒเจพเจ‰เจก เจจเฉ‡เจŸเจฟเจต เจธเจŸเฉˆเจ•*
140
218

เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€, เจนเฉˆ เจจเจพ?

*เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธ เจŸเฉˆเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจธเจŸเฉˆเจ• เจฌเจพเจฐเฉ‡ เจ•เฉ‹เจˆ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเฉ€, เจ…เจธเฉ€เจ‚ เจ‡เจน เจฎเฉฐเจจ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจฌเจพเจกเฉ€ เจ•เจฟเฉฑเจŸ เจตเจพเจฒเจพ เจธเจชเจฐเจฟเฉฐเจ— เจฌเฉ‚เจŸ เจนเฉˆ.

เจธเจคเจฟ เจธเฉเจฐเฉ€ เจ…เจ•เจพเจฒ เจฆเฉเจจเจฟเจ†!

เจ•เฉเจ†เจฐเจ•เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ€ เจธเจญ เจคเฉ‹เจ‚ เจธเจฐเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

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

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

เจ‡เจน เจธเจผเจพเจฌเจฆเจฟเจ• เจ‡เฉฑเจ• เจ•เจฒเจพเจธ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจ•เจพเจซเจผเฉ€ เจนเฉˆ! เจคเฉเจธเฉ€เจ‚ เจตเจฟเจ•เจพเจธ เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจฎเจพเจตเฉ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

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

เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจคเฉ‹เจ‚ เจซเจฐเจ• เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เจฒเจพเจธ เจจเจนเฉ€เจ‚ เจนเฉˆ! เจ•เฉเจ†เจฐเจ•เจธ เจนเฉŒเจŸ เจฐเฉ€เจฒเฉ‹เจก เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฐเฉ€เจธเจŸเจพเจฐเจŸ เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจฌเจฆเจฒ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจฟเจธ เจจเจพเจฒ เจตเจฟเจ•เจพเจธ เจนเฉ‹เจฐ เจตเฉ€ เจคเฉ‡เจœเจผ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ…เฉฑเจ—เฉ‡ เจ•เฉ€ เจนเฉˆ? เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจ•เฉฐเจŸเจฐเฉ‹เจฒเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจธเจผเจพเจฎเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจŸเฉ€เจ•เจพ เจฒเจ—เจพเจ“. เจธเฉ‡เจตเจพ เจ•เฉ‹เจก:

@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!

เจจเฉ‹เจŸ เจ•เจฐเฉ‹ เจ•เจฟ เจ•เฉเจ†เจฐเจ•เจธ เจœเจพเจฃเฉ‡-เจชเจ›เจพเจฃเฉ‡ เจซเจฐเฉ‡เจฎเจตเจฐเจ• - CDI เจ…เจคเฉ‡ JAX-RS เจคเฉ‹เจ‚ เจฎเจฟเจ†เจฐเฉ€ เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ CDI เจ…เจคเฉ‡ JAX-RS เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจ•เฉเจ เจจเจตเจพเจ‚ เจธเจฟเฉฑเจ–เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจฌเฉ‡เจธเจผเฉฑเจ•เฅค

เจกเจพเจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ

เจ‡เจ•เจพเจˆเจ†เจ‚ เจฒเจˆ เจนเจพเจˆเจฌเจฐเจจเฉ‡เจŸ เจ…เจคเฉ‡ เจฎเจฟเจ†เจฐเฉ€ JPA เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ REST เจ•เฉฐเจŸเจฐเฉ‹เจฒเจฐเจพเจ‚ เจจเจพเจฒ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ•เฉ‹เจก เจฒเจฟเจ–เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃ เจฒเจˆ เจ‡เจน เจ•เจพเจซเจผเฉ€ เจนเฉˆ, เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹ @Entity เจ…เจคเฉ‡ application.properties เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพเจธเฉ‹เจฐเจธ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเฉ‹เฅค

เจธเจพเจฐเฉ‡เฅค เจ•เฉ‹เจˆ sessionFactory, persistence.xml เจœเจพเจ‚ เจนเฉ‹เจฐ เจธเฉ‡เจตเจพ เจซเจพเจˆเจฒเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจ‰เจนเฉ€ เจ•เฉ‹เจก เจฒเจฟเจ–เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธเจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจœเฉ‡เจ•เจฐ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ persistence.xml เจซเจพเจˆเจฒ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ ORM เจฒเฉ‡เจ…เจฐ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจฌเจพเจฐเฉ€เจ• เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ•เฉเจ†เจฐเจ•เจธ เจ‡เจ•เจพเจˆเจ†เจ‚ เจฆเฉ€ เจ•เฉˆเจธเจผเจฟเฉฐเจ—, เจ‡เจ•-เจคเฉ‹เจ‚-เจ•เจˆ เจธเจฌเฉฐเจงเจพเจ‚ เจฒเจˆ เจธเฉฐเจ—เฉเจฐเจนเจฟ, เจ…เจคเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเจนเจฟเจฒเฉ€ เจจเจœเจผเจฐ 'เจคเฉ‡ เจ‡เจน เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจฒเฉฑเจ— เจฐเจฟเจนเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจนเฉˆ เจธเจฅเจพเจจเจ• เจ•เฉˆเจธเจผเจฟเฉฐเจ—, เจ‡เฉฑเจ• เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจจเฉ‹เจก เจฒเจˆเฅค เจ‰เจน. เจตเฉฑเจ–-เจตเฉฑเจ– เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจ•เฉˆเจš เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจจเจพเจฒ เจธเจฎเจ•เจพเจฒเฉ€ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ…เจธเจฅเจพเจˆ เจนเฉˆเฅค

เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจ•เฉ‹เจก เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เฉฑเจชเจฐ เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจ•เฉเจ†เจฐเจ•เจธ เจฐเจฟเจเจ•เจŸเจฟเจต เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจธเจผเฉˆเจฒเฉ€ เจฆเจพ เจตเฉ€ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเจฟเจ›เจฒเฉ€ เจ…เจฐเจœเจผเฉ€ เจฆเจพ เจ•เฉ‹เจก เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

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

เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจตเฉ€ เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจจเจคเฉ€เจœเจพ เจ‰เจนเฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจŸเฉˆเจธเจŸเจฟเฉฐเจ—

เจ•เฉเจ†เจฐเจ•เจธ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจŸเฉˆเจธเจŸ 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 เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจŸเฉˆเจธเจŸ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฌเจพเจ•เฉ€ เจธเจพเจฐเฉ‡ เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฒเจˆ เจœเจพเจฃเฉ‚ เจ•เฉ‹เจก เจนเฉˆเฅค

เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ-เจตเจฟเจธเจผเฉ‡เจธเจผ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เฉเจ†เจฐเจ•เจธ GraalVM เจจเจพเจฒ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจนเฉˆ, เจฌเฉ‡เจธเจผเจ• เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ-เจตเจฟเจธเจผเฉ‡เจธเจผ เจ•เฉ‹เจก เจฌเจฃเจพเจ‰เจฃเจพ เจธเฉฐเจญเจต เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ GraalVM เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจ…เจคเฉ‡ GRAALVM_HOME เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เฉฑเจ—เฉ‡ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเฉ‹:

mvn package -Pnative

เจฆเจฟเจฒเจšเจธเจช เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ, เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ. เจ…เจคเฉ‡ เจ‡เจน เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉ‚เจฒ เจ•เฉ‹เจก เจฆเจพ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ JVM 'เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเจพ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค @SubstrateTest เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ-เจตเจฟเจธเจผเฉ‡เจธเจผ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค เจฎเฉŒเจœเฉ‚เจฆเจพ เจŸเฉˆเจธเจŸ เจ•เฉ‹เจก เจฆเฉ€ เจฎเฉเฉœ เจตเจฐเจคเฉ‹เจ‚ เจตเจฟเจฐเจพเจธเจค เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ; เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ-เจจเจฟเจฐเจญเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ•เฉ‹เจก เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

เจคเจฟเจ†เจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจกเฉŒเจ•เจฐ เจตเจฟเฉฑเจš เจชเฉˆเจ• เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจœเจพเจ‚ เจ“เจชเจจเจธเจผเจฟเจซเจŸ เจตเจฟเฉฑเจš เจšเจฒเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจนเจฆเจพเจ‡เจคเจพเจ‚.

เจธเฉฐเจฆ

เจ•เฉเจ†เจฐเจ•เจธ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจจเฉ‚เฉฐ Maven เจ…เจคเฉ‡ Gradle เจจเจพเจฒ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ—เฉเจฐเฉ‡เจกเจฒ เจฆเฉ‡ เจ‰เจฒเจŸ, เจฎเจพเจตเฉ‡เจจ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจฐเจฅเจฟเจค เจนเฉˆเฅค เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจ—เฉเจฐเฉ‡เจกเจฒ เจ‡เฉฑเจ• เจ–เจพเจฒเฉ€ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ; เจตเฉˆเจฌเจธเจพเจˆเจŸ 'เจคเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉˆ เจชเจพเจ  เจชเฉเจธเจคเจ•.

เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚

เจ•เฉเจ†เจฐเจ•เจธ เจ‡เฉฑเจ• เจตเจฟเจธเจคเฉเจฐเจฟเจค เจขเจพเจ‚เจšเจพ เจนเฉˆเฅค เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ†เจฐเจกเจฐ เจนเฉˆ 40 เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚, เจœเฉ‹ เจตเฉฑเจ–-เจตเฉฑเจ– เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ - เจธเจฎเจฐเจฅเจจ เจคเฉ‹เจ‚ เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ€เจ†เจˆ เจ•เฉฐเจŸเฉ‡เจจเจฐ ะธ เจ…เจชเจพเจšเฉ‡ เจŠเจ  เจธเฉ‡เจตเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจฒเฉŒเจ—เจฟเฉฐเจ— เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚เฅค เจ…เจคเฉ‡ เจœเจพเจตเจพ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ•เฉ‹เจŸเจฒเจฟเจจ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจคเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจฒเจˆ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เฉฑเจ• เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจนเฉˆเฅค

เจธเจฟเฉฑเจŸเจพ

เจฎเฉ‡เจฐเฉ€ เจฐเจพเจ เจตเจฟเฉฑเจš, เจ•เฉเจ†เจฐเจ•เจธ เจ‰เจธ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจฐเฉเจเจพเจจเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ•เจพเจซเจผเฉ€ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆเฅค เจฌเฉˆเจ•เจเจ‚เจก เจ•เฉ‹เจก เจตเจฟเจ•เจพเจธ เจ†เจธเจพเจจ เจ…เจคเฉ‡ เจ†เจธเจพเจจ เจนเฉเฉฐเจฆเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจกเฉŒเจ•เจฐ เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฒเจˆ เจฎเฉ‚เจฒ เจธเจนเจพเจ‡เจคเจพ เจœเฉ‹เฉœ เจ•เฉ‡ เจธเฉ‡เจตเจพ เจตเจฟเจ•เจพเจธ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจธเจฐเจฒ เจ…เจคเฉ‡ เจคเฉ‡เจœเจผ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจตเฉฑเจกเจพ เจชเจฒเฉฑเจธ GraalVM เจ…เจคเฉ‡ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ-เจจเจฟเจฐเจญเจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ€ เจชเฉ€เฉœเฉเจนเฉ€ เจฒเจˆ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจธเจฎเจฐเจฅเจจ เจนเฉˆ, เจœเฉ‹ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจ…เจคเฉ‡ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจธเจชเฉ‡เจธ เจฒเฉˆเจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ‡เจน เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเฉ‡เจตเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจฐเจนเจฟเจค เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฒเจˆ เจธเจพเจกเฉ‡ เจตเฉฑเจกเฉ‡ เจœเจจเฉ‚เฉฐเจจ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค

เจ…เจงเจฟเจ•เจพเจฐเจค เจธเจพเจˆเจŸ - quarkus.io. เจ‡เฉฑเจ• เจคเฉ‡เจœเจผ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฒเจˆ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‰เจชเจฒเจฌเจง เจนเจจ GitHub.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹