H2のデータベースはTomcatを再起動するとデータが初期化されるのか

H2のデータベースはTomcatを再起動するとデータが初期化されるのか

H2データベースがTomcatを再起動するとデータが初期化されるかどうかは、H2データベースの設定方法と接続モードによります。

H2データベースには主に2つのモードがあります:

1. インメモリモード (In-Memory Mode)

  • データベースはメモリ内に保持されます。

Tomcatが再起動されるとメモリがクリアされるため、データベースのデータも初期化されます。
この場合、データは再起動のたびに失われます。

  • 接続URLがjdbc:h2:mem:testのようになっている場合は、インメモリモードで動作している可能性があります。

ちょっとした動作確認やテストで利用したい場合に便利なモードになります。

2. ファイルモード (File-Based Mode)

  • データベースはファイルシステムに保存されます。

Tomcatの再起動後もデータは保持されます。

  • 接続URLがjdbc:h2:~/testやjdbc:h2:/path/to/databaseのようになっている場合は、ファイルモードで動作している可能性があります。

この場合、再起動してもデータは失われません。

したがって、H2データベースがTomcatの再起動でデータを初期化するかどうかは、主にH2の接続モード(インメモリモードかファイルモードか)に依存します。
もしデータが再起動後も保持されることを望む場合は、ファイルモードを使用する設定を確認する必要があります。

SpringBootで使用する場合の設定方法

SpringBootでH2データベースを使用する場合、設定方法は以下のようになります。
H2データベースをインメモリモードで使用するか、ファイルモードで使用するかによって設定が異なります。

1. インメモリモードでの設定

インメモリモードでは、H2データベースはメモリ内にのみ保持され、SpringBootアプリケーションが停止するか、Tomcatが再起動されるとデータは失われます。
このモードは、主に開発環境やテスト目的で使用されます。

application.propertiesまたはapplication.ymlの設定

application.propertiesの場合

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

application.ymlの場合

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driverClassName: org.h2.Driver
    username: sa
    password: 
  h2:
    console:
      enabled: true
      path: /h2-console

2. ファイルモードでの設定

ファイルモードでは、H2データベースがファイルシステム上に保存されるため、SpringBootアプリケーションが停止したり、Tomcatが再起動されたりしてもデータは保持されます。
このモードは、より永続的なデータストレージが必要な場合に使用されます。
ただしファイルが無くなった場合は当然データは消えます。

application.propertiesまたはapplication.ymlの設定

application.propertiesの場合

spring.datasource.url=jdbc:h2:file:/data/demo
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

上記の設定で、/data/demoというファイルパスにデータベースファイルが作成されます。
ファイルパスは適宜変更してください。

application.ymlの場合

spring:
  datasource:
    url: jdbc:h2:file:/data/demo
    driverClassName: org.h2.Driver
    username: sa
    password: 
  h2:
    console:
      enabled: true
      path: /h2-console

3. H2コンソールの有効化

H2データベースのコンソール(WebベースのGUI)を有効にするには、上記の設定ファイルでspring.h2.console.enabled=trueを追加します。
また、spring.h2.console.pathでH2コンソールにアクセスするパスを指定できます(デフォルトは/h2-console)。

ブラウザでhttp://localhost:8080/h2-consoleにアクセスして、H2コンソールを利用できます。
デフォルトの接続設定(JDBC URL、ユーザー名、パスワード)はapplication.propertiesまたはapplication.ymlの設定に従います。

4. デフォルト設定の上書き

SpringBootでは、application.propertiesやapplication.ymlを使用してデフォルトの設定を簡単に上書きできます。
また、必要に応じて、Javaクラスで@Configurationアノテーションを使用して、DataSourceを手動で設定することも可能です。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.jdbc.DataSourceBuilder;
import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

  @Bean
  public DataSource dataSource() {
    return DataSourceBuilder.create()
      .driverClassName("org.h2.Driver")
      .url("jdbc:h2:file:/data/demo")
      .username("sa")
      .password("")
      .build();
  }
}

上記の方法を使って、H2データベースをSpringBootアプリケーションで設定することができます。
使用するモード(インメモリまたはファイル)に応じて適切な設定を選択してください。