Spring BootとHSQLDBの統合

1. 概要

link:/spring-boot[Spring Boot]を使用すると、手動の依存関係管理の手間をかけずに、さまざまなデータベースシステムを簡単に操作できます。
具体的には、https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa [Spring Data JPA]スターターは、いくつかの_https://docs.oracleとのシームレスな統合に必要なすべての機能を提供します。 com / javase / 8 / docs / api / javax / sql / DataSource.html [DataSource] _実装。 * + *
このチュートリアルでは、* Spring Bootをhttp://hsqldb.org/[HSQLDB]*と統合する方法を学習します。

2. Mavenの依存関係

Spring BootとHSQLDBの統合がいかに簡単かを示すために、「メモリ内HSQLDB」データベースを使用して顧客エンティティに対してCRUD操作を実行する単純なJPAリポジトリレイヤーを作成します。
サンプルリポジトリレイヤーを起動して実行するために使用するlink:/spring-boot-starters[Spring Boot starter]は次のとおりです。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>runtime</scope>
</dependency>
https://search.maven.org/search?q=g:org.hsqldb%20AND%20a:hsqldb[HSQLDB]依存関係も含まれていることに注意してください。 これがない場合、Spring Bootはlink:/hikaricp[HikariCP]を介して_DataSource_ BeanとJDBC接続プールを自動的に構成しようとします。
結果として、* _ pom.xml_ファイルで有効な_DataSource_依存関係を指定しないと、ビルドに失敗します*。
また、_https://search.maven.org/search?q = g:org.springframework.boot%20AND%20a:spring-boot-starter-data-jpa [spring- Maven Centralのboot-starter-data-jpa] _。

3. HSQLDBデータベースへの接続

デモリポジトリレイヤーを実行するために、インメモリデータベースを使用します。 ただし、ファイルベースのデータベースを使用することもできます。 これらの各方法については、以下のセクションで説明します。

* 3.1。 外部HSQLDBサーバーの実行*

外部HSQLDBサーバーを実行してファイルベースのデータベースを作成する方法を見てみましょう。 HSQLDBのインストールとサーバーの実行は、全体的に簡単です。
従うべき手順は次のとおりです。
  • 最初、
    HSQLDBをダウンロードそれをフォルダーに解凍します

  • HSQLDBは​​デフォルトのデータベースをすぐに提供しないため、
    例として_“ testdb” _という名前を作成します

  • コマンドプロンプトを起動し、HSQLDB data folderに移動します

  • data folder内で、次のコマンドを実行します。
    +

java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • 上記のコマンドはHSQLDBサーバーを起動し、データベースを作成します
    そのソースファイルは_data_ folderに保存されます

  • 次のようにすると、データベースが実際に作成されたことを確認できます。
    data folder。“ testdb.lck” _、“ testdb.log” “ testdb.properties” 、および“ testdb.script” _(ファイルの数は異なります作成するデータベースのタイプに応じて)

    *データベースがセットアップされたら、データベースへの接続を作成する必要があります。*
  • Windowsでこれを行うには、データベース_bin_ folderに移動して、_runManagerSwing.bat_ファイルを実行します。 これにより、HSQLDBデータベースマネージャーの初期画面が開き、接続資格情報を入力できます。

  • タイプ: HSQLデータベースエンジン

  • * URL:* jdbc:hsqldb:hsql:// localhost / testdb

  • ユーザー:“ SA”(システム管理者)

  • *パスワード:*フィールドを空のままにします

  • Linux / Unix / Mac *では、NetBeans、Eclipse、またはIntelliJ IDEAを使用して、同じ資格情報を使用して、IDEのビジュアルツールを介してデータベース接続を作成できます。

    これらのツールのいずれでも、データベースマネージャまたはIDE内でSQLスクリプトを実行することにより、データベーステーブルを簡単に作成できます。
    接続したら、_customers_ tableを作成できます。
CREATE TABLE customers (
   id INT  NOT NULL,
   name VARCHAR (45),
   email VARCHAR (45),
   PRIMARY KEY (ID)
);
いくつかの簡単な手順で、_customers_ tableを含むファイルベースの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
データベースURLの最後に追加される_DB_CLOSE_DELAY = -1_パラメーターに注意してください。 インメモリデータベースで作業する場合、これを指定する必要があります。* HibernateであるJPA実装は、アプリケーションの実行中にデータベースを閉じません*。

*4. Customer 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. _Customer_リポジトリ

さらに、_Customer_ JPAエンティティに基本的なCRUD機能を持たせることができる、薄い永続性レイヤーを実装する必要があります。
_https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html [CrudRepository] ​​_インターフェースを拡張するだけで、このレイヤーを簡単に実装できます。
@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long> {}

6. _Customer_リポジトリのテスト

最後に、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リポジトリレイヤーの開発でファイルベースまたはインメモリデータベースを使用する方法を学びました。
通常どおり、この記事に示されているすべてのコードサンプルは、https://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence [GitHub]で入手できます。