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

1. Общ преглед

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

По-конкретно, Spring Data JPA starter предоставя цялата функционалност, необходима за безпроблемна интеграция с няколко реализации на DataSource .

В този урок ще научим как да интегрираме Spring Boot с HSQLDB .

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

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

Ето стартовия бутон Spring Boot, който ще използваме, за да стартираме и стартираме нашия пробен слой от хранилище:

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

Имайте предвид, че сме включили и зависимостта HSQLDB. Без него Spring Boot ще се опита автоматично да конфигурира компонент 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 , да отидат на база данни бин папката и се изпълнява runManagerSwing.bat файла. Това ще отвори началния екран на HSQLDB Database Manager, където можем да въведем идентификационните данни за връзка:

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

В Linux / Unix / Mac можем да използваме NetBeans, Eclipse или IntelliJ IDEA, за да създадем връзка с базата данни чрез визуалните инструменти на IDE, използвайки същите идентификационни данни.

Във всеки от тези инструменти е лесно да се създаде таблица на база данни или чрез изпълнение на SQL скрипт в Database Manager или в IDE.

След като се свържем, можем да създадем таблица за клиенти :

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

Само с няколко лесни стъпки създадохме базирана на файлове HSQLDB база данни, съдържаща таблица на клиентите .

3.2. В application.properties File

Ако искаме да се свържем с предишната базирана на файлове база данни от 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. Клиентът Entity

След като настройките за връзка с базата данни вече са настроени, следва да дефинираме обекта на клиента :

@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 функционалност на нашите клиентски 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. Заключение

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.