แจแแกแแแแแ
XNUMX แแแ แขแก RedHat (แแแแ IBM)
แแแแแแแ แฏแแแ แแแฎแแแก แฌแแแงแแแ แแแแขแคแแ แแ Kubernetes-แแก แแแแแแแแแแกแ แแ แฃแกแแ แแแ แ แแแแแแแชแแแแแก แแแแแแแแ แแแแกแแแแก, แ แแช แฃแแ แฃแแแแแงแแคแก แแแแแแแแแ แแแก แแแแแแแแ แแแแก แแ แแแแ แแแแแแแแก แ แแแแ แช แ แแแฅแขแแฃแ, แแกแ แแแแแ แแขแแฃแ แกแขแแแจแ.
แฒงแฃแ แแแ
แแแแแ แแแฃแแแ แแแแแแแชแแแก แแแจแแแแแก แซแแแแแ แแแฆแแแ แกแแฉแฅแแ แ แแ แแแฎแกแแแ แแแแก แแแแแแ แแแฎแแแ แแแ. แแฅ แแ แแก แแแแแชแแแแแ แแแแแแแแแ แแก แแแแกแแแขแแแแ:
แแ แ แแแกแแฌแงแแกแแแแ แแแ แแแ แแแกแฃแฎแแแแ:
แแแแคแแแฃแ แแชแแ
แแแกแแแแแแ
แแแกแแแแแแ + 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 แแ แแก แแแคแแ แแแแแแแ แฉแแ แฉแ. แแแแแแแ แแ แแก แจแแแแแแ
แแแกแแแแ
แฉแแแ แแแ แแ, Quarkus แกแแแแแแ แจแแแกแแแแแแแ แแแแ แแแแแแ แขแแแแแแชแแแแก. Backend แแแแแก แจแแแฃแจแแแแแ แฃแคแ แ แแ แฃแคแ แ แแแแแแ แฎแแแแ แแ แแก แฉแแ แฉแ แแแแแ แฃแคแ แ แแแแ แขแแแแแก แแ แแฉแฅแแ แแแก แกแแ แแแกแแก แแแแแแแแ แแแแก Docker-แแกแ แแ Kubernetes-แแก แแจแแแแแฃแ แ แแฎแแ แแแญแแ แแก แแแแแขแแแแ. แฃแแแ แแแแแ แ แแแฃแกแแ GraalVM-แแก แฉแแจแแแแแฃแแ แแฎแแ แแแญแแ แ แแ แแแแขแคแแ แแแแ แแแแแแแแแแฃแแ แกแฃแ แแแแแแก แแแแแ แแชแแ, แ แแช แกแแจแฃแแแแแแก แแซแแแแก แกแแ แแแกแแแก แกแฌแ แแคแแ แแแแฌแงแแก แแ แแแแแแแแก แแแฎแกแแแ แแแแก แแชแแ แ แแแแแแ. แแ แแก แซแแแแแ แแแแจแแแแแแแแแแ แแแแ แแกแแ แแแกแแแแแ แแ แฃแกแแ แแแ แ แแ แฅแแขแแฅแขแฃแ แแ แแแกแแแ แแแ แแแขแแชแแแแก แฉแแแแก แแ แแจแ.
แฒแคแแชแแแแฃแ แ แแแแ แแ -
แฌแงแแ แ: www.habr.com