在Spring应用程序中运行junit测试时访问h2 Web控制台

时间:2012-09-12 14:10:16

标签: spring junit h2

我正在构建一个Spring应用程序,当我从Web浏览器运行JUnit测试时,我需要检查我的H2内存数据库。

在我的Spring配置中,我有一个bean,负责创建我的数据库模式并用一些将在我的JUnit测试中使用的数据填充它。我还在我的测试环境中添加了一个bean,它创建了一个Web服务器,我最终将查找我的数据。

<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在调试我的测试之前我无法连接,但我可以在开始测试后连接。)

无论如何如果我从网络浏览器打开我的H2控制台,其中没有显示架构。任何想法??

非常感谢!!

3 个答案:

答案 0 :(得分:13)

由于这可能是一个测试调试功能,您可以在运行时使用 @Before 添加它:

import org.h2.tools.Server;

/* Initialization logic here */

@Before
public void initTest(){
    Server webServer = Server.createWebServer("-web", 
                                    "-webAllowOthers", "-webPort", "8082");
    webServer.start();
}

然后连接到 http://localhost:8082/

答案 1 :(得分:3)

为了将来参考,还有另一种方法:

  1. 启动数据库和Web服务器(版本可能不同):

    $ cd .../maven_repository/com/h2database/h2/1.4.194 $ java -cp h2-1.4.194.jar org.h2.tools.Server -tcp -web -browser TCP server running at tcp://169.254.104.55:9092 (only local connections) Web Console server running at http://169.254.104.55:8082 (only local connections)

  2. 将代码中的测试数据库网址设置为jdbc:h2:tcp://localhost:9092/mem:mytest

  3. 运行或调试测试。
  4. 点击在步骤1中打开的浏览器窗口中的Connect
  5. H2的Jar文件可以在https://mvnrepository.com/artifact/com.h2database/h2下载。

    服务器可以通过测试文件中的@Before启动,就像在snovelli的回答中一样,但仅限于以后建立的数据库连接,这可能是个问题。

答案 2 :(得分:2)

我想问题是你是直接从你的应用程序连接到h2db。不是通过使用bean启动的服务器。因此,您的app和h2db-web-interface无法共享一个内存数据库。

您应该将测试中的jdbcUrl更改为jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle,并且在浏览器中应该连接到同一个URL。

对于像jdbc:h2:tcp://localhost/...这样的jdbc网址,所有连接都将通过h2db-server,您可以在浏览器中查看数据库状态。