我正在构建一个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控制台,没有模式显示在它。
非常感谢!!
6条答案
按热度按时间lf5gs5x21#
由于这可能是一个测试调试特性,您可以在运行时使用**@Before**:
然后连接到http://本地主机:8082/
注意:除非您需要将此代码作为CI构建的一部分运行,否则您需要在完成调试后删除此代码
ndasle7k2#
下面是另一种方法,供将来参考:
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)
1.将代码中测试的数据库url设置为
jdbc:h2:tcp://localhost:9092/mem:mytest
。1.运行或调试测试。
1.在步骤1中打开的浏览器窗口中单击
Connect
。H2的Jar文件可在https://mvnrepository.com/artifact/com.h2database/h2下载。
服务器可以通过测试文件中的
@Before
启动,就像snovelli的回答一样,但只有在与数据库建立连接的情况下,这可能是一个问题。lyr7nygr3#
我猜问题是你直接从你的应用程序连接到h2 db,而不是通过你用bean启动的服务器,因此你的应用程序和h2 db-web-interface不能共享一个内存数据库。
您应该在测试中将jdbcUrl更改为类似
jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle
的内容,并在浏览器中连接到相同的URL。使用像
jdbc:h2:tcp://localhost/...
这样的jdbc url,所有的连接都将通过h2 db-server,你可以在浏览器中查看数据库状态。jqjz2hbq4#
如果你在属性中定义了jdbc url,比如jdbc:h2:mem:db,那么当数据库被创建时,它实际上会得到一个更长的名字。
向测试类添加@Autowired DataSource dataSource,在某处设置调试点,然后使用dataSource.getConnection()检查该数据源并查看url属性。
日本数据库:氢2:分子量:43 ed 83 d 6 - 97 a1 -4515-a925-a8 ba 53 cd 322 c
把它插到网络控制台上就能看到我所期待的一切。
这不是最直接的方法,但确实有效。
0s7z1bwu5#
@snovelli上面的回答很好。要在IDE中调试特定的测试用例,请在测试用例的末尾添加一个无限循环,然后转到浏览器并启动控制台,您可以查询数据。
现在您可以进入浏览器并在http://localhost:8082启动控制台。当然,调试后删除以上两个更改
cetgtptt6#
这不是答案,而是一个调试技巧。
当您最终访问h2-conole
http://127.0.0.1:8082/
时,您可能会注意到数据库更改没有显示。这是因为测试用例不是事务性的,并且数据未提交。虽然此行为很好,但由于每个测试用例都必须在预定义的环境中运行,因此如果要调试并查看数据库更改,则不太好。
要实现这一点,请在测试用例上方添加
@Commit
注解,并在带@AfterAll
注解的方法中放置一个虚拟行,以停止测试并让您看到h2控制台(h2服务器将在测试完成时停止)。