Ich werde eine Zusammenfassung der Inhalte hinterlassen, die die Verwendbarkeit von Quarkus bestätigt haben, was ein heißes Thema auf den Straßen ist. Nur Get Started war nicht genug, deshalb habe ich versucht, eine REST-Web-API zu verwenden, die PostgreSQL lokal mit Hibernate betreibt.
Füllen Sie zuerst QUARKUS - ERSTELLEN IHRER ERSTEN ANWENDUNG aus. Der Stand des Projekts sieht so aus.
$ 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 Mach einen Tisch oder so. Die von IntelliJ generierte DDL sieht wie folgt aus.
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
);
Fügen Sie die Abhängigkeit zwischen Hibernate und PostgreSQL zu pom.xml
hinzu und beziehen Sie sich dabei auf das Element QUARKUS --EXTENSIONS.
Ändern Sie außerdem "quarkus-resteasy" in "quarkus-resteasy-jsonb", da Sie in JSON nicht mit der Abhängigkeit "Erste Schritte" anfordern und antworten können.
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>
Umgebungswerte können in application.properties verwaltet werden, wie in QUARKUS - APPLICATION CONFIGURATION GUIDE beschrieben. Beschreiben Sie die für die DB-Verbindung erforderlichen Informationen wie folgt.
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 Erstellen Sie ein Entitätsobjekt, das zur Tabelle passt, um die Daten zuzuordnen.
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 Erstellen Sie eine Serviceklasse für DB-Operationen.
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 Erstellen Sie eine Ressourcenklasse, die HTTP-Anforderungen verarbeitet.
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();
}
}
Ich möchte es einfach starten, also starte ich es im Entwicklungsmodus anstelle von 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"}]
Ich wollte unbedingt eine Verbindung zu MySQL herstellen, aber es gibt keinen MySQL-Treiber in der Erweiterung. Ich habe es mit PostgreSQL gemacht, weil ich mich nicht gut mit dem MariaDB-Treiber verbinden konnte. Ich werde versuchen, mich bald mit MySQL zu rächen.