Integration von Spring Boot in HSQLDB

1. Übersicht

Spring Boot macht es wirklich einfach, mit verschiedenen Datenbanksystemen zu arbeiten, ohne das manuelle Abhängigkeitsmanagement.

Insbesondere bietet der Spring Data JPA-Starter alle Funktionen, die für eine nahtlose Integration in mehrere DataSource- Implementierungen erforderlich sind .

In diesem Tutorial erfahren Sie, wie Sie Spring Boot in HSQLDB integrieren .

2. Die Maven-Abhängigkeiten

Um zu demonstrieren, wie einfach die Integration von Spring Boot in HSQLDB ist, erstellen wir eine einfache JPA-Repository-Schicht, die CRUD-Operationen für Kundenentitäten mithilfe einer speicherinternen HSQLDB-Datenbank ausführt .

Hier ist der Spring Boot-Starter, mit dem wir unsere Beispiel-Repository-Ebene zum Laufen bringen:

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

Beachten Sie, dass wir auch die HSQLDB-Abhängigkeit aufgenommen haben. Ohne diese Option versucht Spring Boot , über HikariCP automatisch eine DataSource- Bean und einen JDBC-Verbindungspool für uns zu konfigurieren.

Wenn wir in unserer Datei pom.xml keine gültige DataSource- Abhängigkeit angeben, tritt folglich ein Buildfehler auf .

Überprüfen Sie außerdem die neueste Version von Spring-Boot-Starter-Data-JPA auf Maven Central.

3. Herstellen einer Verbindung zu einer HSQLDB-Datenbank

Für die Ausübung unserer Demo-Repository-Schicht verwenden wir eine In-Memory-Datenbank. Es ist jedoch auch möglich, mit dateibasierten Datenbanken zu arbeiten. Wir werden jede dieser Methoden in den folgenden Abschnitten untersuchen.

3.1. Ausführen eines externen HSQLDB-Servers

Lassen Sie uns einen Blick darauf werfen, wie ein externer HSQLDB-Server zum Laufen gebracht und eine dateibasierte Datenbank erstellt wird. Die Installation von HSQLDB und die Ausführung des Servers ist insgesamt unkompliziert.

Hier sind die Schritte, die wir befolgen sollten:

  • Zuerst laden wir HSQLDB herunter und entpacken es in einen Ordner
  • Da HSQLDB keine standardmäßige Standarddatenbank bereitstellt, erstellen wir beispielsweise eine Datenbank mit dem Namen "testdb"
  • Wir starten eine Eingabeaufforderung und navigieren zum HSQLDB - Datenordner
  • Innerhalb des Datenordners, werden wir den folgenden Befehl ausführen:
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • Der obige Befehl wird den HSQLDB - Server starten und unsere Datenbank - Dateien , deren Quelle erstellen wird in dem gespeichert werden Datenordner
  • Wir können sicherstellen , dass die Datenbank auf das , indem Sie tatsächlich erstellt wurde Datenordner, der eine Reihe von Dateien mit dem Namen enthalten sollte „testdb.lck“ , „testdb.log“ , „testdb.properties“ und „testdb.script“ ( Die Anzahl der Dateien hängt vom Typ der von uns erstellten Datenbank ab.

Sobald die Datenbank eingerichtet wurde, müssen wir eine Verbindung zu ihr herstellen.

Gehen Sie dazu unter Windows zum Ordner " database bin " und führen Sie die Datei " runManagerSwing.bat " aus. Dadurch wird der Startbildschirm von HSQLDB Database Manager geöffnet, in dem Sie die Verbindungsanmeldeinformationen eingeben können:

  • Typ: HSQL-Datenbankmodul
  • URL: jdbc: hsqldb: hsql: // localhost / testdb
  • Benutzer: "SA" (Systemadministrator)
  • Passwort: Feld leer lassen

Unter Linux / Unix / Mac können wir NetBeans, Eclipse oder IntelliJ IDEA verwenden, um die Datenbankverbindung über die visuellen Tools der IDE mit denselben Anmeldeinformationen herzustellen.

In jedem dieser Tools ist es einfach, eine Datenbanktabelle zu erstellen, indem Sie entweder ein SQL-Skript im Datenbankmanager oder in der IDE ausführen.

Sobald die Verbindung hergestellt ist, können wir eine Kundentabelle erstellen :

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

In nur wenigen einfachen Schritten haben wir eine dateibasierte HSQLDB-Datenbank mit einer Kundentabelle erstellt .

3.2. Die Datei application.properties

Wenn Sie von Spring Boot aus eine Verbindung zur vorherigen dateibasierten Datenbank herstellen möchten, sollten Sie die folgenden Einstellungen in die Datei application.properties aufnehmen :

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 

Wenn wir alternativ eine In-Memory-Datenbank verwenden, sollten wir diese verwenden:

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 

Beachten Sie den Parameter DB_CLOSE_DELAY = -1 , der an das Ende der Datenbank-URL angehängt wird. Wenn Sie mit einer In-Memory-Datenbank arbeiten, müssen Sie dies angeben, damit die JPA-Implementierung im Ruhezustand die Datenbank nicht schließt, während die Anwendung ausgeführt wird .

4. Der Kunde Entity

Nachdem die Einstellungen für die Datenbankverbindung bereits eingerichtet sind, müssen wir als Nächstes unsere Kundenentität definieren :

@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. Das Kunden- Repository

Darüber hinaus müssen wir eine dünne Persistenzschicht implementieren, die es uns ermöglicht, grundlegende CRUD-Funktionen für unsere Kunden- JPA-Entitäten bereitzustellen.

Wir können diese Ebene einfach implementieren, indem wir nur die CrudRepository- Schnittstelle erweitern:

@Repository public interface CustomerRepository extends CrudRepository {}

6. Testen des Kunden- Repositorys

Schließlich sollten wir sicherstellen, dass Spring Boot tatsächlich eine Verbindung zu HSQLDB herstellen kann. Wir können dies leicht erreichen, indem wir nur die Repository-Schicht testen.

Beginnen wir mit dem Testen der Methoden findById () und findAll () des Repositorys :

@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); } } 

Lassen Sie uns abschließend die save () -Methode testen :

@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. Fazit

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.