Перейти к основному содержимому

Интеграция Spring Boot с HSQLDB

· 5 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

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

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

**

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

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

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

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.4.0</version>
<scope>runtime</scope>
</dependency>

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

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

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

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

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

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

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

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

  • Сначала мы скачаем HSQLDB и разархивируем его в папку
  • Поскольку HSQLDB не предоставляет базу данных по умолчанию из коробки, мы создадим ее под названием «testdb» для примера .
  • Мы запустим командную строку и перейдем к папке данных HSQLDB.
  • В папке данных мы запустим следующую команду:
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • Приведенная выше команда запустит сервер HSQLDB и создаст нашу базу данных, исходные файлы которой будут храниться в папке данных .
  • Мы можем убедиться, что база данных действительно создана, перейдя в папку данных , которая должна содержать набор файлов с именами «testdb.lck» , «testdb.log» , «testdb.properties» и «testdb.script» ( количество файлов зависит от типа создаваемой нами базы данных)

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

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

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

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

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

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

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

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

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, то есть Hibernate, не закрывала базу данных во время работы приложения .

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

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

@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<Customer, Long> {}

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", "john@domain.com"));
assertThat(customerRepository.findById(1L)).isInstanceOf(Optional.class);
}

@Test
public void whenFindingAllCustomers_thenCorrect() {
customerRepository.save(new Customer("John", "john@domain.com"));
customerRepository.save(new Customer("Julie", "julie@domain.com"));
assertThat(customerRepository.findAll()).isInstanceOf(List.class);
}
}

Наконец, давайте протестируем метод save() :

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

7. Заключение

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

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