In questo articolo vedremo un esempio di utilizzo di Spring Boot all'interno di Quarkus. Il supporto a Spring Boot da parte dei realizzatori di Quarkus non deve essere visto come un tentativo di integrazione completa di Spring, infatti la compatibilità fornita è posta ad un livello tale da rendere naturale la migrazione di un'applicazione Spring Boot verso la sua versione Quarkus.
Le motivazioni che sono alla base di uno spostamento da Spring Boot a Quarkus risiedono essenzialmente nella natura stessa di Quarkus: una piattaforma innovativa per la realizzazione di container Linux e microservizi Java Kubernetes-Native con ridotto utilizzo di memoria e tempi di avvio rapidi.
Quando compilata in modalità nativa, un'applicazione Quarkus può avviarsi in un tempo T inferiore ai 0.0015 secondi. In modalità JVM un'applicazione Quarkus occupa circa la metà della memoria occupata dalla stessa applicazione realizzata con Spring, avviandosi in un tempo T sempre pari a circa la metà del tempo richiesto dall'equivalente applicazione Spring.
Si tratta di valori indicativi ma che danno sicuramente l'idea delle potenzialità di questo framework.
Spring Web Api
Utilizzando l'IDE Intellij ed il plug-in Quarkus, vediamo come creare una semplice applicazione Spring Boot utilizzando l'estensione Spring Web Api. Creiamo un nuovo progetto Quarkus con impostazioni di default come visto nel precedente articolo. Definiamo successivamente i parametri Maven del progetto come illustrato nella seguente figura:
nella successiva schermata selezioniamo "Compatibility" e applichiamo un check in corrispondenza di "Quarkus Extension for Spring Web Api":
Attendiamo quindi il completamento della creazione del progetto.
Il codice Spring Boot
L'applicazione che andiamo a realizzare, è un semplice servizio REST che consente la conversione di un valuta in euro nel corrispondente valore in dollari. Definiamo una classe controller, nel percorso Java del progetto Maven, con il seguente codice al suo interno:
package it.html.spring.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestParam;
@RestController
@RequestMapping("/springweb/eurodollar")
public class EuroDollarController {
@GetMapping("/conversion")
public Conversion conversion(@RequestParam(value = "euro")
float euro) {
return new Conversion(euro * 1.19f, euro);
}
public static class Conversion {
private float euro;
private float dollar;
public Conversion(float dollar, float euro) {
this.euro = euro;
this.dollar = dollar;
}
public void setEuro(float euro) {
this.euro = euro;
}
public float getDollar() {
return dollar;
}
}
}
ed un'ulteriore classe per il test del servizio all'interno del percorso test del progetto:
package it.html.spring.web;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
@QuarkusTest
public class EuroDollarTest {
@Test
public void testEuroDollarEndpoint() {
given()
.when().get("/springweb/eurodollar/conversion?euro=2.5")
.then()
.statusCode(200)
.body(is("{\"dollar\":2.9750001}"));
}
}
osservando con attenzione le classi realizzate notiamo l'utilizzo delle API Spring Boot nella prima classe e quelle di Quarkus nella classe di test. Realizziamo quindi un'applicazione Spring all'interno di Quarkus che testiamo attraverso le Quarkus API.
Avvio e test dell'applicazione
Per avviare l'applicazione procediamo come illustrato nel primo articolo. Nella sezione "Maven" di Intellij eseguiamo "quarkus:dev". Il risultato è l'avvio dell'applicazione Quarkus:
Nel caso di problemi di rilevazione di dipendenze da parte di Intellij si deve provare ad eseguire il comando Maven
mvn -U idea:idea
dal terminale Intellij per forzare il download delle dipendenze necessarie. Per un test diretto apriamo il browser ed inseriamo il seguente URL:
http://localhost:8080/springweb/eurodollar/conversion?euro=2.5
il risultato dovrebbe essere rappresentato dalla seguente risposta REST:
Per eseguire i test Quarkus rappresentati dalla classe EuroDollarTest
, selezioniamo la classe come mostrato nella seguente immagine e facciamo click sulla freccia verde di esecuzione:
Quarkus viene questa volta avviato sulla porta 8081
con successiva esecuzione del metodo di test testEuroDollarEndpoint()
.