我正在构建一个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控制台,其中没有显示架构。任何想法??
非常感谢!!
答案 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)
为了将来参考,还有另一种方法:
启动数据库和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)
将代码中的测试数据库网址设置为jdbc:h2:tcp://localhost:9092/mem:mytest
。
Connect
。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,您可以在浏览器中查看数据库状态。