Intégration de Spring Boot avec HSQLDB

1. Vue d'ensemble

Spring Boot permet de travailler très facilement avec différents systèmes de base de données, sans les tracas de la gestion manuelle des dépendances.

Plus spécifiquement, Spring Data JPA starter fournit toutes les fonctionnalités requises pour une intégration transparente avec plusieurs implémentations DataSource .

Dans ce didacticiel, nous allons apprendre à intégrer Spring Boot à HSQLDB .

2. Les dépendances de Maven

Pour démontrer à quel point il est facile d'intégrer Spring Boot à HSQLDB, nous allons créer une couche de référentiel JPA simple qui effectue des opérations CRUD sur les entités client à l'aide d'une base de données HSQLDB en mémoire .

Voici le démarreur Spring Boot que nous utiliserons pour faire fonctionner notre exemple de couche de référentiel:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE org.hsqldb hsqldb 2.4.0 runtime 

Notez que nous avons également inclus la dépendance HSQLDB. Sans cela, Spring Boot essaiera de configurer automatiquement un bean DataSource et un pool de connexions JDBC pour nous via HikariCP.

En conséquence, si nous ne spécifions pas de dépendance DataSource valide dans notre fichier pom.xml , nous obtiendrons un échec de construction .

De plus, assurons-nous de vérifier la dernière version de spring-boot-starter-data-jpa sur Maven Central.

3. Connexion à une base de données HSQLDB

Pour exercer notre couche de référentiel de démonstration, nous utiliserons une base de données en mémoire. Cependant, il est également possible de travailler avec des bases de données basées sur des fichiers. Nous explorerons chacune de ces méthodes dans les sections ci-dessous.

3.1. Exécution d'un serveur HSQLDB externe

Voyons comment faire fonctionner un serveur HSQLDB externe et créer une base de données basée sur des fichiers. L'installation de HSQLDB et l'exécution du serveur sont globalement simples.

Voici les étapes à suivre:

  • Tout d'abord, nous allons télécharger HSQLDB et le décompresser dans un dossier
  • Étant donné que HSQLDB ne fournit pas de base de données par défaut prête à l'emploi , nous en créerons une appelée «testdb» à des fins d'exemple
  • Nous allons lancer une invite de commande et naviguer vers le dossier de données HSQLDB
  • Dans le dossier de données , nous exécuterons la commande suivante:
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • La commande ci-dessus démarrera le serveur HSQLDB et créera notre base de données dont les fichiers source seront stockés dans le dossier data
  • Nous pouvons nous assurer que la base de données a bien été créée en allant dans le dossier data , qui devrait contenir un ensemble de fichiers appelés «testdb.lck» , «testdb.log» , «testdb.properties» et «testdb.script» ( le nombre de fichiers varie en fonction du type de base de données que nous créons)

Une fois la base de données configurée, nous devons créer une connexion avec elle.

Pour ce faire sous Windows , allons dans le dossier bin de la base de données et exécutons le fichier runManagerSwing.bat . Cela ouvrira l'écran initial de HSQLDB Database Manager, où nous pouvons entrer les informations d'identification de connexion:

  • Type: Moteur de base de données HSQL
  • URL: jdbc: hsqldb: hsql: // localhost / testdb
  • Utilisateur: «SA» (administrateur système)
  • Mot de passe: laissez le champ vide

Sous Linux / Unix / Mac , nous pouvons utiliser NetBeans, Eclipse ou IntelliJ IDEA pour créer la connexion à la base de données via les outils visuels de l'EDI, en utilisant les mêmes informations d'identification.

Dans l'un de ces outils, il est simple de créer une table de base de données en exécutant un script SQL dans le gestionnaire de base de données ou dans l'EDI.

Une fois connecté, nous pouvons créer une table clients :

CREATE TABLE customers ( id INT NOT NULL, name VARCHAR (45), email VARCHAR (45), PRIMARY KEY (ID) ); 

En quelques étapes simples, nous avons créé une base de données HSQLDB basée sur des fichiers contenant une table clients .

3.2. Le fichier application.properties

Si nous souhaitons nous connecter à la base de données de fichiers précédente de Spring Boot, voici les paramètres que nous devons inclure dans le fichier application.properties :

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:hsql://localhost/testdb spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=update 

Sinon, si nous utilisons une base de données en mémoire, nous devrions les utiliser:

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=create 

Veuillez noter le paramètre DB_CLOSE_DELAY = -1 ajouté à la fin de l'URL de la base de données. Lorsque vous travaillez avec une base de données en mémoire, nous devons le spécifier, de sorte que l'implémentation JPA, qui est Hibernate, ne ferme pas la base de données pendant que l'application est en cours d'exécution .

4. L' entité client

Avec les paramètres de connexion à la base de données déjà configurés, nous devons ensuite définir notre entité client :

@Entity @Table(name = "customers") public class Customer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String name; private String email; // standard constructors / setters / getters / toString } 

5. Le référentiel client

De plus, nous devons implémenter une couche de persistance fine, qui nous permet d'avoir des fonctionnalités CRUD de base sur nos entités JPA client .

Nous pouvons facilement implémenter cette couche en étendant simplement l' interface CrudRepository :

@Repository public interface CustomerRepository extends CrudRepository {}

6. Test du référentiel client

Enfin, nous devons nous assurer que Spring Boot peut réellement se connecter à HSQLDB. Nous pouvons facilement accomplir cela en testant simplement la couche du référentiel.

Commençons par tester les méthodes findById () et findAll () du référentiel :

@RunWith(SpringRunner.class) @SpringBootTest public class CustomerRepositoryTest { @Autowired private CustomerRepository customerRepository; @Test public void whenFindingCustomerById_thenCorrect() { customerRepository.save(new Customer("John", "[email protected]")); assertThat(customerRepository.findById(1L)).isInstanceOf(Optional.class); } @Test public void whenFindingAllCustomers_thenCorrect() { customerRepository.save(new Customer("John", "[email protected]")); customerRepository.save(new Customer("Julie", "[email protected]")); assertThat(customerRepository.findAll()).isInstanceOf(List.class); } } 

Enfin, testons la méthode save () :

@Test public void whenSavingCustomer_thenCorrect() { customerRepository.save(new Customer("Bob", "[email protected]")); Customer customer = customerRepository.findById(1L).orElseGet(() -> new Customer("john", "[email protected]")); assertThat(customer.getName()).isEqualTo("Bob"); }

7. Conclusion

In this article, we learned how to integrate Spring Boot with HSQLDB, and how to use either a file-based or in-memory database in the development of a basic JPA repository layer.

As usual, all the code samples shown in this article are available over on GitHub.