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


107

私は単に、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接続文字列を確認する方法)を示すサンプルコードはありますか?


これを私の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 =しかし、私が本当に知りたいのは、構成をプログラムで管理する方法(または少なくともスプリングのデフォルトを見つける方法)です
Aaron Zeckoski


1
geoand-これは実際の質問でリンクしたのと同じことなので、役に立たないと思います。
アーロン・ゼコスキ2014

2
Dave-その構成を追加することで、H2コンソールにアクセスしてテーブルを表示できますが、それが正しい方法であるかどうかはわかりません(私がいないときに、春に1つのセットアップにアクセスすることをお勧めします)設定)またはSpringが使用しているJDBC接続を取得する方法。
アーロン・ゼコスキ2014

1
JDBC URLを使用:jdbc:h2:mem:testdb
Chinmoy

回答:


110

これは、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


1
使用new WebServlet()すると問題が発生します。これでどのクラスがインポートされますか?それは、唯一のオプションとして、javax.servlet.annotation.WebServletを利用しており、それは単なるインターフェースです。
Splaktar 2014年

5
わかりました、org.h2.server.web.WebServletが必要です。私のプロジェクトは、新しいh2ライブラリを取り込むためにGradleと同期していませんでした。
Splaktar 2014年

21
application.propertiesの一部は必要ありません。配置したApplication.java部分を使用しjdbc:h2:mem:testdbて、空のユーザー名と空のパスワードで接続できます。localhost:8082はこの設定で動作します。
Splaktar 2014年

2
@Splaktarありがとうございます!私は接続方法を理解しようと一生懸命行っていましたが、パズルの欠けている部分はデータベース名に「testdb」を使用することでした。
オタク、

1
@Splaktar-あなたのコメントを答えにする必要があります。あなたが言ったように、EmbeddedDatabaseConnectionのソースコードは、すべてのデフォルトの埋め込みDB接続URIを示しています
karthik m

55

Spring Boot 1.3.0.M3以降、H2コンソールは自動構成できます。

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

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

あなたは春のブート開発ツールを使用していない場合でも、自動設定の設定により、コンソールまだすることができspring.h2.console.enabledtrue

チェックアウトこのすべての詳細については、文書の一部を。

この方法で設定する場合、コンソールにはhttp:// localhost:8080 / h2-console /からアクセスできることに注意してください。


または、ドキュメントで説明されているように、spring.h2.console.enabled = trueで有効にします。前提条件により、自動的に有効になります。
keiki 2015年

あなたがウェブアプリを開発しているとはどういう意味ですか?
-garci560

Spring Bootのコンテキストではspring-boot-starter-web、依存関係として追加されたことを意味します
geoおよび'05年

1
また、localhost:8080 / h2-consoleを開いたときに、jdbc urlにjdbc:h2:mem:testdbを記述してテーブルを表示する必要があると思います。また、localhost:8080 / h2-consoleの localhostの後に、アプリケーションのポートを指定する必要があります。
anujprashar

3
@anujprashar jdbc:h2:mem:testdbコンソールにアクセスできるURLではなく、接続URLに対するものだと確信しています
geoおよび

44

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

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

基本的に、私にとって正しいJDBC URLは次のとおりです。 jdbc:h2:mem:testdb


1
馬鹿げた質問ですが、設定のspring.datasource.nameのデフォルトがtestdbであるため、これはデフォルトのJDBC URLのようです。なぜ私はfoodbのようなものにデータベース名を変更した場合、ケースはまだJDBC同じではなく、JDBCですthatsの場合:H2:MEM:foodb
ダン・ベガ

2
このjdbc url jdbc:h2:mem:testdbは正しいです。Spring data jpaによって作成されたデフォルトのデータベースに最終的に接続するのに役立ちました。
Kamal Joshi 2016

次のようなDB名を設定できます。spring.datasource.url= jdbc:h2:mem:test; application.properties内
Aleksei Maide 2018

23

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)とパスワード(空の場合、UIからプロンプトが表示されたときにパスワードを入力しないなど)を使用して、H2データベースのWebコンソールにアクセスできます。


1
すべきではないspring.h2.console.enabled=true?Falseの場合は無効になります。そしてspring.h2.console.path=/h2-consoleので冗長である/h2-console春ブーツからデフォルトのパスです。ドキュメントによると、「デフォルトでは、コンソールは/ h2-consoleで使用できます。spring.h2.console.pathプロパティを使用して、コンソールのパスをカスタマイズできます。」詳細はこちらをdocs.spring.io/spring-boot/docs/current/reference/html/...
georger

彼がコンソールにアクセスできるOPを示すために、後者のプロパティを含めました。明らかに、spring.h2.console.enabled.enabled = falseはコンソールを無効にします。要点は、これがプロパティとして設定可能であるということです。わかりやすくするために、このプロパティをtrueに設定します。
mancini0

20

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

  1. またはに開発者ツールの依存関係を追加しますpom.xmlbuild.gradle

メイベン

<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/
  2. jdbc:h2:mem:testdbJDBC URLとして指定
  3. プロジェクトで指定したエンティティがテーブルとして表示されます。

2
これを依存関係セクションに追加すると、「runtime( "com.h2database:h2")」が機能しました
Raja Nagendra Kumar

17

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

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

以下のための春のブート2.1.1春Initialzrからストレート:

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

    • POM:spring-boot-starter、h2、spring-boot-starter-web、 spring-boot-devtools
  2. 開発ツールなし -プロパティで設定する必要があります: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(デフォルトは動作しません)


10

Spring Bootの開発者ツールを使用する場合、H2 Consoleがデフォルトで有効になっています。/h2-console/ からアクセスできます。ログインインターフェースで、入力にJDBC URLvalueを使用します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を参照してください。


4
なぜjdbc:h2:mem:testdbデフォルトのjdbc URLとして設定されないのですか?私のjpaエンティティがどこで問題を起こしたのかをよく考えて時間を費やしました
Sudip Bhandari

10

春のapplication.propertiesを確認してください

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

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

ここに画像の説明を入力してください


1
完璧な答え!
gaurav

6

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

プロジェクトで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.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/


"spring.jpa.hibernate.ddl-auto"を異なる値で2回...
Yura

3

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

H2コンソールにログインするときのパスとしてjdbc:h2:mem:testdbを使用します。

明らかに、Spring Bootプロパティを変更した場合、データソースは異なる可能性がありますが、デフォルトを見つける方法に苦労しているようです。これですべてです!H2にログインすると、スキーマが表示されます。


1

私がこれと同じ問題を抱えていたとき、私は非常に愚かな間違いをしました。ユニットテストケースを実行するためにH2 DBを追加したので、scopetestに設定しましたpom.xml。を使用してアプリケーションを実行している間、mvn spring:run私はを削除しましたがscope、現在は正常に動作しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.