Автор оригинала: 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 .