web-dev-qa-db-ja.com

Springによって開始された組み込みH2データベースのコンテンツを表示する

次の構成のおかげで、Springによって開始されたH2データベースのコンテンツをWebブラウザーで表示したいと思います。

<jdbc:embedded-database id="dataSource" type="H2" />

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath:db/populateDB.sql"/>
</jdbc:initialize-database>

ログでJDBC URLを検索しました。

DEBUG o.s.j.d.SimpleDriverDataSource - Creating new JDBC Driver Connection to [jdbc:h2:mem:dataSource;DB_CLOSE_DELAY=-1]

そのため、次のように接続フォームに入力できます。

enter image description here

ただし、残念ながら、dbはまだ空ですが、populateDB.sqlスクリプトが原因ではありません。

何か案が?

ありがとう!

47
tduchateau

H2またはHSQLDBインメモリデータベースのコンテンツを表示する とほぼ同じ質問です。

構成に次を追加するだけです。

<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
    <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092"/>
</bean>
<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
    <constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
</bean>

これにより、H2 WebコンソールとTCPサーバーが埋め込みデータベースと同じJVMにあるため、Webブラウザーでポート8082にアクセスできます(URLとしてjdbc:h2:mem:dataSourceを入力します)または、SQuirreLSQLなどの外部SQLクライアントを使用してポート9092にアクセスし、同じデータを表示します。

48
hshib

スプリングブートを使用すると、application.propertiesファイルのいくつかの構成でこれを行うことができます。

spring.h2.console.enabled=true
spring.h2.console.path=/console/

その後、 http:// localhost:8080/console / でh2 Webコンソールにアクセスできます。デフォルトのログイン構成は、変更しない限り機能するはずです。

スプリングブート ドキュメント を参照してください。

19
chAmi

データベースURL jdbc:h2:mem:dataSourceは、インメモリデータベースを使用していることを意味します。 2番目のJavaプロセスを開始してこのデータベースに接続する場合、2つのインメモリデータベース(プロセスごとに1つ)が必要になります。

既存のデータベースに接続する場合、複数のオプションがあります。

  • 同じプロセス内からデータベースに接続します。 2番目のプロセスを開始しないでください。

  • 「jdbc:h2:/ data/db/dataSource」のように、ハードコード化された絶対パスで永続化されたデータベースを使用します。

  • より複雑/推奨されない:2番目のプロセスを開始する場合、理論的にはサーバーモードを使用してインメモリデータベースに接続できます。しかし、それはテストを実行したサーバーを起動する必要があることを意味します。

18
Thomas Mueller

Spring Bootを使用する場合、H2コンソールサーブレットを次のように登録できます。

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

コンソールをリモートで使用可能にする場合、重要な行はaddInitParameterで、"webAllowOthers"から"true"

17
user2754985

Xml jdbc構成でembeddebを使用する場合、データベースのデフォルト名は「testdb」です

あなたのURL接続で使用してみてください:

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
13
F. Geraerts

Java Configのセットアップが必要な場合は、ServletContextInitializerを実装してコンソールサーバーをチェーンするときにTCPサーバーを初期化するだけでなく、かなり簡単に実行できます...

@Configuration
public class WebConfig implements ServletContextInitializer{
...

@Override
public void onStartup( ServletContext servletContext )
//do stuff onStartUp...
initH2TCPServer( servletContext );
....    

@Bean(initMethod="start", destroyMethod="stop")
public Server initH2TCPServer(ServletContext servletContext) {
    log.debug( "Initializing H2 TCP Server" );
    try {
        server = Server.createTcpServer( "-tcp", "-tcpAllowOthers", "-tcpPort", "9092" );
    } catch( SQLException e ) {
        e.printStackTrace();
    } finally {
        //Always return the H2Console...
        initH2Console( servletContext );
    }
    return server;
}

public void initH2Console( ServletContext servletContext ) {
    log.debug( "Initializing H2 console" );
    ServletRegistration.Dynamic h2ConsoleServlet = servletContext.addServlet(
    "H2Console", new org.h2.server.web.WebServlet() );
    h2ConsoleServlet.addMapping( "/console/*" );
 );
}
3
Eddie B

私は同様の問題に直面していました。しかし、修正は非常に小さなものでした。詳細については、ページを参照してください: https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/ .

私の場合、H2依存関係のスコープを「ランタイム」として追加しました。私はそれを削除し、問題を修正しました。 H2コンソールでテーブルを表示できません。

私のPOMの以前の依存関係は次のとおりです。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

そして、私の問題を修正した新しい依存関係:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>
0
Gunjan Shah