27

Spring アプリケーションを構築していて、Web ブラウザから JUnit テストを実行している間に、H2 インメモリ データベースを検査する必要があります。

私のSpring構成には、データベーススキーマを作成し、JUnitテスト内で使用されるデータを入力するBeanがあります。また、最終的にデータを検索する Web サーバーを作成するテスト コンテキストに Bean を追加しました。

<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server"
    factory-method="createWebServer" init-method="start" lazy-init="false">
    <constructor-arg value="-web,-webAllowOthers,-webPort,11111" />
</bean>

JUnit テストからそのデータにアクセスでき、H2 サーバーはテスト段階でのみ実行されるため、データベースが適切に設定されているため、すべて問題ないようです (my_ip:111111 にアクセスしようとすると、それを知ることができます)。テストをデバッグする前は接続できませんが、テストを開始すると後で接続できます)。

とにかく、Web ブラウザーから H2 コンソールを開くと、スキーマが表示されません。何か案は??

どうもありがとう!!

4

4 に答える 4

38

これはおそらくテストデバッグ機能になるため、@Beforeを使用して実行時に追加できます。

import org.h2.tools.Server;

/* Initialization logic here */

@BeforeAll
public void initTest() throws SQLException {
    Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082")
    .start();
}

そして、http://localhost:8082/に接続します。

注: CI ビルドの一部としてこれを実行する必要がない限り、デバッグが終了したらこのコードを削除する必要があります。

于 2015-12-03T14:35:31.660 に答える
2

問題は、アプリケーションから直接 h2db に接続していることだと思います。Bean で起動するサーバー経由ではありません。このため、アプリと h2db-web-interface は 1 つのメモリ内データベースを共有できません。

テストで jdbcUrl を次のように変更jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracleし、ブラウザで同じ URL に接続する必要があります。

jdbc:h2:tcp://localhost/...すべての接続が h2db-server を通過するような jdbc url を使用すると、ブラウザでデータベースの状態を表示できます。

于 2012-09-13T14:52:00.900 に答える
0

プロパティで jdbc url を jdbc:h2:mem:db のように定義した場合、データベースが作成されると、実際には少し長い名前になります。

@Autowired DataSource dataSource をテスト クラスに追加し、どこかにデバッグ ポイントを設定し、dataSource.getConnection() を使用してそのデータソースを検査し、url プロパティを調べます。私が今この瞬間に走っている場合、それは

jdbc:h2:mem:43ed83d6-97a1-4515-a925-a8ba53cd322c

それを Web cosole に差し込むと、私が期待しているすべてが表示されます。

これは最も簡単な方法ではありませんが、機能します。

于 2021-08-19T15:52:11.000 に答える