Рубрики
Без рубрики

Интеграция пружинного ботинка с HSQLDB

Узнайте, как использовать HSQLDB в слое сохранения JPA приложения Spring Boot.

Автор оригинала: Alejandro Ugarte.

1. Обзор

Spring Boot позволяет действительно легко работать с различными системами баз данных, без хлопот ручного управления зависимостями.

Более конкретно, Spring Data JPA starter предоставляет все функциональные возможности, необходимые для бесшовной интеграции с несколькими реализациями DataSource .

В этом уроке мы узнаем, как интегрировать Spring Boot с HSQLDB .

2. Зависимости Maven

Чтобы продемонстрировать, насколько легко интегрировать Spring Boot с HSQLDB, мы создадим простой уровень репозитория JPA, который выполняет операции CRUD с объектами клиентов, используя базу данных HSQLDB в памяти .

Вот стартер весенней загрузки, который мы будем использовать для запуска и запуска нашего слоя хранилища образцов:


    org.springframework.boot
    spring-boot-starter-data-jpa
    2.2.2.RELEASE


    org.hsqldb
    hsqldb
    2.4.0
    runtime

Обратите внимание, что мы также включили зависимость HSQLDB . Без этого Spring Boot попытается автоматически настроить источник данных bean и пул соединений JDBC для нас через ХикариКП .

Как следствие, если мы не указываем допустимую зависимость источника данных в вашем pom.xml файл, мы получим сбой сборки .

Кроме того, давайте обязательно проверим последнюю версию spring-boot-starter-data-jpa на Maven Central.

3. Подключение к базе данных HSQLDB

Для реализации нашего демонстрационного уровня репозитория мы будем использовать базу данных в памяти. Однако можно также работать с базами данных на основе файлов. Мы рассмотрим каждый из этих методов в следующих разделах.

3.1. Запуск внешнего сервера HSQLDB

Давайте рассмотрим, как запустить внешний сервер HSQLDB и создать файловую базу данных. Установка HSQLDB и запуск сервера в целом просты.

Вот шаги, которым мы должны следовать:

  • Сначала мы загрузим HSQLDB и распакуем его в папку
  • Поскольку HSQLDB не предоставляет базу данных по умолчанию из коробки, мы создадим ее с именем “testdb” для примера.
  • Мы запустим командную строку и перейдем в папку HSQLDB data
  • В папке data мы выполним следующую команду:

  • Приведенная выше команда запустит сервер HSQLDB и создаст нашу базу данных, исходные файлы которой будут храниться в папке data
  • Мы можем убедиться, что база данных действительно создана, перейдя в папку data , которая должна содержать набор файлов с именами “testdb.lck” , “testdb.log” , “testdb.properties” и “testdb.script” (количество файлов варьируется в зависимости от типа базы данных, которую мы создаем)

После того, как база данных настроена, нам нужно создать соединение с ней.

Чтобы сделать это в Windows , давайте перейдем в папку базы данных bin и запустим файл runManagerSwing.bat . Это откроет начальный экран менеджера баз данных HSQLDB, на котором мы сможем ввести учетные данные для подключения:

  • Тип: Ядро базы данных HSQL
  • URL: jdbc:hsqldb:hsql://localhost/testdb
  • Пользователь: “SA” (Системный администратор)
  • Пароль: оставьте поле пустым

В Linux/Unix/Mac мы можем использовать NetBeans , Eclipse или IntelliJ IDEA для создания подключения к базе данных с помощью визуальных инструментов IDE, используя те же учетные данные.

В любом из этих инструментов легко создать таблицу базы данных, выполнив сценарий SQL в диспетчере баз данных или в среде IDE.

После подключения мы можем создать таблицу customers :

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

Всего за несколько простых шагов мы создали файловую базу данных HSQLDB, содержащую таблицу customers .

3.2. Файл application.properties

Если мы хотим подключиться к предыдущей файловой базе данных из Spring Boot, вот параметры, которые мы должны включить в файл 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

В качестве альтернативы, если мы используем базу данных в памяти, мы должны использовать следующие:

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

Обратите внимание на параметр DB_CLOSE_DELAY=-1 , добавленный в конец URL-адреса базы данных. При работе с базой данных в памяти нам нужно указать это, чтобы реализация JPA, которая находится в спящем режиме, не закрывала базу данных во время работы приложения .

4. Организация-Заказчик

Поскольку параметры подключения к базе данных уже настроены, далее нам нужно определить наш Клиент объект:

@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. Клиентский Репозиторий

Кроме того, нам необходимо реализовать тонкий слой персистентности, который позволяет нам иметь базовую функциональность CRUD на наших объектах Customer JPA.

Мы можем легко реализовать этот слой, просто расширив интерфейс CrudRepository :

@Repository
public interface CustomerRepository extends CrudRepository {}

6. Тестирование репозитория Клиентов

Наконец, мы должны убедиться, что Spring Boot действительно может подключиться к HSQLDB. Мы можем легко достичь этого, просто протестировав уровень репозитория.

Давайте начнем тестировать методы репозитория findById() и findAll() :

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

Наконец, давайте протестируем метод 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. Заключение

В этой статье мы узнали, как интегрировать Spring Boot с HSQLDB, и как использовать базу данных на основе файлов или в памяти при разработке базового уровня репозитория JPA.

Как обычно, все примеры кода, показанные в этой статье, доступны на GitHub .