web-dev-qa-db-ja.com

Spring Boot + IntelliJ + Embedded Database =頭痛の種

いくつかのドキュメント(Spring、Spring Boot、H2、HSQLDB、Derby、IntelliJ)の奥深くに埋もれているコアコンセプトが欠けているか、これを見つめすぎていました。

Spring Bootプロジェクトが進行中です。最初にH2 DBを使用して初期化しようとしましたが、IntelliJでそれに接続しようとしましたが、最初の子をあきらめないとDBを簡単に参照できない場合があることを理解しました( IntelliJデータベースクライアントを使用してH2データベースに接続します )。

そこで私はDerbyDBに移動しました。同じこと-私のアプリでdbルートフォルダーが作成され、IntelliJでそれに接続しますが、アプリの起動から作成されたばかりの私のテーブルは参照できません。

私はSQLiteを試しましたが、SQLiteのサポートはそれほど良くなく、特定の更新機能が利用できませんでしたが、IntelliJブラウザーで少なくとも私のテーブルを見つけることができました!

簡単に使用、閲覧、操作できるシンプルな単一ファイル埋め込みDBが必要です。助言がありますか?!

アプリケーションを実行すると、スキーマがエクスポートされていることがわかります。

2015-07-19 09:37:45.836  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table user_roles if exists
Hibernate: drop table users if exists
Hibernate: create table user_roles (id bigint generated by default as identity, role_name varchar(255), version bigint, user_id bigint, primary key (id))
Hibernate: create table users (id bigint generated by default as identity, email varchar(255), password varchar(255), username varchar(255), version bigint, primary key (id))
Hibernate: alter table user_roles add constraint FK_g1uebn6mqk9qiaw45vnacmyo2 foreign key (user_id) references users
2015-07-19 09:37:45.849  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

IntelliJでは、何もありません(heeneneeの提案に従って、jdbc:h2:./ test; AUTO_SERVER = TRUEのリモートソースを使用):

enter image description here

私が何を求めているのかが不明確なため、いくつかの投票が終了するのを見ます。

H2、HSQLDB、またはDerbyデータベースを使用してアプリケーションを開発し、IntelliJでそれらに接続するにはどうすればよいですか?

18
Jack

H2自動混合モード で十分です。使用する jdbc:h2:~/mydbInHomeDir;AUTO_SERVER=TRUEとしてあなたのspring.datasource.url。 IntelliJで、remoteH2データソースを作成し、まったく同じJDBC URLを使用します。データベーステーブルを表示するには、IntelliJデータベースウィンドウの[同期]ボタンを明示的に押す必要がある場合があります。

15
heenenee

上記のheeneneeに追加します。 AUTO_SERVERを指定しない場合、H2インスタンスへの接続は1つだけ許可されます。

Spring-data-jpaでspring-bootを使用しています。各テーブルを表すエンティティに対して@Entityが宣言されていることを確認してください。

以下は私のapplication.yml/application.propertiesです

spring.datasource.url: 
jdbc:h2:file:/Users/blah[![enter image description here][1]][1]/db/vlad4;AUTO_SERVER=TRUE
spring.datasource.username: sa
spring.datasource.password:

spring:
  jpa:
    hibernate:
      ddl-auto: create #will create schema based on entities
    show-sql: true

アプリケーションを起動し、データをインポートします。クラスパスにimport.sqlがある場合、Spring Bootは自動的にデータをインポートします。例:/src/main/resources/import.sql

IntelliJを次のように構成します enter image description here

IntelliJを使用していない場合は、サーバー/クライアントコンボ@ http://www.h2database.com/html/download.html をダウンロードして、次のコマンドを使用してブラウザーベースのクライアントを起動します。

h2/bin: Java -cp h2*.jar org.h2.tools.Server

接続文字列を指定して、組み込みデータベースに接続します。 enter image description here

5
Vladimir

この記事の手順に従う場合: https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

IntelliJデータベースクライアントを使用して接続できるように、TCPサーバー経由で公開されたH2インメモリデータベースを備えたSpring Bootアプリケーションを取得するのに役立つと思います。

3
Jason White

同様の問題がありました。デフォルトのcreate-drop休止状態のddl戦略。アプリケーションのシャットダウン後のこの戦略では、休止状態がセッションの最後にスキーマを破壊するため、IntelliJは何も表示しません。 ddl戦略をcreateに変更すると、Hibernateがスキーマを作成し、次のアプリケーション起動時に以前のデータを破棄します。

これが私の設定の例です:

application.yml

spring:
  datasource.url: jdbc:h2:./db/testDb
  jpa.hibernate.ddl-auto: create

IntelliJデータベースプロパティ

enter image description here

結果

enter image description here

3
solomkinmv