Je vais laisser un résumé du contenu qui a confirmé la convivialité de Quarkus, qui est un sujet brûlant dans les rues. Seul Get Started ne suffisait pas, j'ai donc essayé d'utiliser une API Web REST qui exploite PostgreSQL localement avec Hibernate.
Terminez d'abord QUARKUS - CRÉATION DE VOTRE PREMIÈRE APPLICATION. L'état du projet ressemble à ceci.
$ tree ./
./
├── pom.xml
├── quarkus_quickstart.iml
└── src
├── main
│ ├── docker
│ │ └── Dockerfile
│ ├── java
│ │ └── com
│ │ └── dsert
│ │ └── quickstart
│ │ ├── GreetingResource.java
│ │ └── GreetingService.java
│ └── resources
│ ├── META-INF
│ │ ├── microprofile-config.properties
│ │ └── resources
│ │ └── index.html
│ └── application.properties
└── test
└── java
└── com
└── dsert
└── quickstart
├── GreetingResourceTest.java
└── NativeGreetingResourceIT.java
PostgreSQL Faites une table ou quelque chose comme ça. Le DDL généré par IntelliJ ressemble à ce qui suit.
create database quarkus with owner quarkus;
create table if not exists users
(
id serial not null
constraint users_pk
primary key,
name varchar(255) not null
);
Ajoutez la dépendance entre Hibernate et PostgreSQL à pom.xml
, en vous référant à l'élément QUARKUS --EXTENSIONS.
De plus, changez quarkus-resteasy
en quarkus-resteasy-jsonb
car vous ne pouvez pas demander et répondre en JSON avec la dépendance comme Get Started.
pom.xml
<dependencies>
...
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
<!-- Hibernate ORM specific dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
<scope>provided</scope>
</dependency>
<!-- JDBC driver dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
Vous pouvez gérer les valeurs d'environnement dans application.properties comme décrit dans le QUARKUS - GUIDE DE CONFIGURATION DE L'APPLICATION. Décrivez les informations requises pour la connexion à la base de données comme suit.
src/main/resources/application.properties
quarkus.datasource.url: jdbc:postgresql://localhost:5432/quarkus
quarkus.datasource.driver: org.postgresql.Driver
quarkus.datasource.username: quarkus
quarkus.datasource.password: quarkus-pass
Entity Créez un objet Entity qui correspond à la table pour mapper les données.
src/main/java/com/dsert/quickstart/User.java
package com.dsert.quickstart;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "users")
public class User {
private int id;
private String name;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Service Créez une classe de service pour les opérations DB.
src/main/java/com/dsert/quickstart/UserService.java
package com.dsert.quickstart;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.transaction.Transactional;
import java.util.List;
@ApplicationScoped
public class UserService {
@Inject
EntityManager em;
@Transactional
public void createUser(String name) {
User user = new User();
user.setName(name);
this.em.persist(user);
}
public List<User> getUsers() {
return this.em.createNativeQuery("select * from users", User.class).getResultList();
}
}
Resource Créez une classe de ressources qui gère les requêtes HTTP.
src/main/java/com/dsert/quickstart/UserResource.java
package com.dsert.quickstart;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserResource {
@Inject
UserService service;
@POST
public Map<String, String> createUser(User user) {
this.service.createUser(user.getName());
return Collections.singletonMap("message", "OK");
}
@GET
public List<User> getUsers() {
return this.service.getUsers();
}
}
Je veux le démarrer facilement, donc je le lance en mode développement au lieu de DockerImage.
mvn compile quarkus:dev 6.2m
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.d-sert:quarkus_quickstart >--------------------
[INFO] Building quarkus_quickstart 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quarkus_quickstart ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ quarkus_quickstart ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:0.11.0:dev (default-cli) @ quarkus_quickstart ---
[INFO] Using servlet resources quarkus_quickstart/src/main/resources/META-INF/resources
Listening for transport dt_socket at address: 5005
2019-03-13 08:49:58,673 INFO [io.qua.dep.QuarkusAugmentor](main) Beginning quarkus augmentation
2019-03-13 08:49:59,282 INFO [io.qua.dep.QuarkusAugmentor](main) Quarkus augmentation completed in 609ms
2019-03-13 08:50:05,128 INFO [io.quarkus](main) Quarkus 0.11.0 started in 6.638s. Listening on: http://127.0.0.1:8080
2019-03-13 08:50:05,130 INFO [io.quarkus](main) Installed features: [agroal, cdi, hibernate-orm, jdbc-postgresql, narayana-jta, resteasy, resteasy-jsonb]
POST
$ curl -X POST -H 'Content-Type: application/json' 'http://localhost:8080/users' -d '{"name": "sert"}'
{"message":"OK"}
GET
$ curl 'http://localhost:8080/users'
[{"id":5,"name":"sert"}]
Je voulais vraiment me connecter à MySQL, mais il n'y a pas de pilote MySQL dans l'extension, Je l'ai fait avec PostgreSQL car je ne pouvais pas bien me connecter avec MariaDB Driver. J'essaierai de me venger bientôt avec MySQL.
Recommended Posts