Esercitazioni di Spring Boot 8: H2 un database in-memory
In questa nuova esercitazione vedremo come utilizzare il database in-memory H2.
Con questa soluzione, particolarmente utile per scopi didattici e in fase di sviluppo, possiamo lavorare con un database vero e proprio senza preoccuparci di installazioni e di ricorrere a container Docker o macchine virtuali. Il tutto corredato da una comoda console di gestione.
Mettiamoci all'opera per modificare il progetto relativo ai calciatori.
Prima di tutto aggiungiamo la dipendenza richiesta all'interno del file pom.xml
<!-- h2 database dependency. -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Quindi dobbiamo modificare le impostazioni del datasource nel file application.properties.
Commentiamo per il momento la parte relativa a MySql che abbiamo utilizzato in precedenza.
Vedremo in seguito come gestire il tutto in maniera più elegante con i profili di Spring.
Le proprietà da aggiungere sono le seguenti
spring.datasource.url=jdbc:h2:mem:players
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
### Enable the console for the h2 database ###
spring.h2.console.enabled=true
In particolare osserviamo che l'utente del database è il classico sa privo di password, che possiamo modificare a nostro piacimento. Il nome del database è "players" riportato in coda alla url del datasource.
Per la parte di inizializzazione dei dati creiamo all'interno di un nuovo package net.emmecilab.players.components
una classe H2DataLoader
che implementa l'interfaccia CommandLineRunner
. Tale classe va annotata con @Component
affinchè Spring possa creare un bean.
La CommandLineRunner
richiede l'overriding del metodo run()
all'interno del quale andremo ad inserire le istruzioni per l'aggiunta dei dati.
Per prima cosa effettuiamo l'autowiring del repository con
@Autowired
private PlayerRepository playerRepository;
quindi salviamo una serie di dati di test con
playerRepository.save(new Player("Francesco", "Totti", "Roma", "midfielder"));
playerRepository.save(new Player("Alessandro", "Del Piero", "Juventus", "forward"));
playerRepository.save(new Player("Mauro", "Icardi", "Juventus", "forward"));
Dopo aver avviato l'applicazione
possiamo accedere alla console di H2 attraverso l'url http://localhost:8080/h2-console con le credenziali impostate in precedenza e che popolano i campi del form
Notiamo la presenza del database players che possiamo interrogare scrivendo delle query SQL
Per il resto nulla è cambiato quindi le API sono accessibili come già visto in precedenza.
Come sempre il codice è disponibile su GitHub.
[VIDEO]
[LINKS]