次の構成のおかげで、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]
そのため、次のように接続フォームに入力できます。
ただし、残念ながら、dbはまだ空ですが、populateDB.sqlスクリプトが原因ではありません。
何か案が?
ありがとう!
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にアクセスし、同じデータを表示します。
スプリングブートを使用すると、application.propertiesファイルのいくつかの構成でこれを行うことができます。
spring.h2.console.enabled=true
spring.h2.console.path=/console/
その後、 http:// localhost:8080/console / でh2 Webコンソールにアクセスできます。デフォルトのログイン構成は、変更しない限り機能するはずです。
スプリングブート ドキュメント を参照してください。
データベースURL jdbc:h2:mem:dataSource
は、インメモリデータベースを使用していることを意味します。 2番目のJavaプロセスを開始してこのデータベースに接続する場合、2つのインメモリデータベース(プロセスごとに1つ)が必要になります。
既存のデータベースに接続する場合、複数のオプションがあります。
同じプロセス内からデータベースに接続します。 2番目のプロセスを開始しないでください。
「jdbc:h2:/ data/db/dataSource」のように、ハードコード化された絶対パスで永続化されたデータベースを使用します。
より複雑/推奨されない:2番目のプロセスを開始する場合、理論的にはサーバーモードを使用してインメモリデータベースに接続できます。しかし、それはテストを実行したサーバーを起動する必要があることを意味します。
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"
。
Xml jdbc構成でembeddebを使用する場合、データベースのデフォルト名は「testdb」です
あなたのURL接続で使用してみてください:
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
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/*" );
);
}
私は同様の問題に直面していました。しかし、修正は非常に小さなものでした。詳細については、ページを参照してください: 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>