web-dev-qa-db-ja.com

Spring BootのデフォルトのH2 JDBC接続(およびH2コンソール)

私は単にapplication.propertiesに何も指定せずにmvn spring:runで起動したときにspring-bootが作成する組み込みH2データベースのH2データベースの内容を見ようとしています。 Hibernate JPAがテーブルを作成しているのがわかりますが、データベースの下のURLでh2コンソールにアクセスしようとすると、テーブルがありません。

http://localhost:8080/console/

私はこのような提案を見ます: Springによって始められた埋め込みH2データベースの内容を見る

しかし、推奨されているXMLをどこで起動するかわからないし、たとえ行ったとしても、外部データベースが設定されたときにh2consoleをもう使用できないようにするには、これを処理する必要があります。ある種の条件付きコードを使って(あるいは、MavenプロファイルがアクティブになっているときにH2だけを含めるという最も理想的な場合には、springが自動的にそれを処理するようにする)ことができます。

H2コンソールを起動時に動作させる方法(およびspringが使用しているjdbc接続文字列が何であるかを調べる方法)を示すサンプルコードがありますか。

96
Aaron Zeckoski

これで、H2コンソールがH2と一緒にスプリングブートで動作するようになりました。これが正しいかどうかはわかりませんが、他に誰も解決策を提示していないため、これを実行するのが最善の方法であることを示唆します。

私の場合は、H2コンソールを起動するときに入力するものがあるように、データベースの特定の名前を選択しました(この場合は "AZ")。 spring.jpa.database-platformを省略しても問題はないようですが、これらすべてが必要であると思います。

Application.propertiesで、

spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Application.Java(またはいくつかの設定)で:

@Bean
public ServletRegistrationBean h2servletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
    registration.addUrlMappings("/console/*");
    return registration;
}

その後、{server}/console /にあるH2コンソールにアクセスできます。これをJDBC URLとして入力します。jdbc:h2:mem:AZ

97
Aaron Zeckoski

Spring Boot 1.3.0.M3の時点で、H2コンソールは自動設定可能です。

前提条件は次のとおりです。

  • あなたはWebアプリを開発しています
  • Spring Boot Dev Toolsが有効になっている
  • H2はクラスパス上にあります

Spring Boot Dev Toolsを使用しなくても、spring.h2.console.enabledtrueに設定することで、コンソールを自動設定することができます。

すべての詳細については、 this ドキュメントの一部をチェックしてください。

このように設定すると、コンソールにアクセスできるようになります。 http:// localhost:8080/h2-console /

47
geoand

このトピックに関する素晴らしいチュートリアルを見つけました。

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

基本的に私にとって正しいJDBC URLはjdbc:h2:mem:testdbでした。

43

ステップバイステップガイドと同様の答え。

  1. pom.xmlまたはbuild.gradleDeveloper tools依存関係を追加します

Maven

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. http://localhost:8080/h2-console/からdbにアクセスする
  2. JDBC URLとしてjdbc:h2:mem:testdbを指定します
  3. プロジェクトで指定したエンティティがテーブルとして表示されます。
19
biniam

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html より

H2 Webコンソール(H2ConsoleProperties):

spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.

上記の2行を私のapplication.propertiesファイルに追加するだけで、デフォルトのユーザー名(sa)とパスワード(空)を使ってH2データベースのWebコンソールにアクセスできます。

17
mancini0

/resources/application.propertiesには以下のプロパティしかありません。このURL( http:// localhost:8080/h2-console / )を使用してスプリングブートを実行した後、H2コンソールのテーブルが表示され、テーブルデータを表示するために読み取られました。 SQLコマンド1つ、Javaコードでは、データをフェッチしている間、schema.sqlが小文字の名前を使用している場合でも、列名は大文字になります。

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
16
rak22

Spring Initialzrから直接Spring Boot 2.1.1の場合:

  1. devtoolsのデフォルトは http://127.0.0.1:8080/h2-console/ です。

    • POM:spring-boot-starter、h2、spring-boot-starter-web、spring-boot-devtools
  2. devtoolsがなければ - プロパティで設定する必要があります:spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • POM:spring-boot-starter、h2、spring-boot-starter-web

あなたがそこに着いたら - JDBC URLを設定します。jdbc:h2:mem:testdb(デフォルトのものは動作しません)

9
Witold Kaczurba

Spring Bootの開発者ツールを使用している場合、デフォルトでH2コンソールが有効になっています。 /h2-console /からアクセスできます。ログインインタフェースでは、入力JDBC URLに値jdbc:h2:mem:testdbを使用します。 mem文字列に注意してください。

Spring Bootの開発者ツールを使用していない場合は、application.propertiesを使用してspring.h2.console.enabled=trueでコンソールを有効にできます。これで/h2-consoleの下のコンソールが有効になります。 URLを変更したい場合はspring.h2.console.path=my_console_pathを使って別のエントリを追加できます。

デフォルトのスキーマ名はtestdbです。

詳細は Spring Boot Documentation にあります。

8
georger

春のアプリケーションを確認してください。

spring.datasource.url = jdbc:h2:mem:testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE

ここでtestdbはデータベースで定義されています。他の方法で接続している間は、デフォルトのdbに接続している間、h2 consoleが同じ値を持っていることを確認してください。

enter image description here

7
vaquar khan

テーブルを取得するために必要なのは、2つのSQLファイルschema.sql(テーブル作成用)とdata.sql(作成されたテーブル用のデータ)を作成することだけです。これらのファイルはsrc/main/resourcesフォルダーに置かれます。 Spring boot autoがそれらを検出し、実行時に残りの面倒を見ます。

プロジェクトで2つ以上のDBを使用している場合は、(schema-h2.sql - h2 DBの場合、schema-Oracle.sql - Oracle DBの場合)のような特定のファイルを使用してください。 data.sqlについても同じことが言えます。

また、schema.sqlにdrop tableステートメントを最初のステートメントとして追加して、テーブルを確実に削除します。重複レコードの追加を避けるため。

スプリングブーツのリンクはこちらです。

私のapplication.propertiesは以下の通りです。

spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true 
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.jpa.hibernate.ddl-auto=none
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true

以下のリンクの手順に従うことができます。

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

4
kemparaj565

Spring Boot 2.0.2.RELEASEでは、POMファイルにspring-boot-starter-data-jpaとcom.h2databaseを設定するだけでは、H2コンソールを動作させることができません。以下のようにspring-boot-devtoolsを設定する必要があります。必要に応じて、この記事ではAaron Zeckoskiからの指示に従うことができます

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
 </dependency>
3
Pragnesh Rana

H2コンソールにログインするときは、パスとしてjdbc:h2:mem:testdbを使用してください。

Spring Bootのプロパティを変更した場合はデータソースが異なる可能性がありますが、デフォルトの検索方法に苦労しているようです。それだけです。 H2にログインした後にあなたのスキーマを見るでしょう。

3
user9023317

私がこれと同じ問題を抱えていたとき、私は非常に愚かなミスをしました。単体テストケースを実行するためにH2 DBを追加したので、pom.xmlscopetestに設定しました。 mvn spring:runを使用してアプリケーションを実行している間、私はscopeを削除しました、そしてそれは今うまく働きます。

1
AbhishekB