Spring Boot提供了两个与JPA自动配置相关的神奇注释:@DataJpaTest和@AutoConfigureTestDatabase。
javadoc说:
默认情况下,使用@DataJpaTest注释的测试将使用内存中的嵌入式数据库(替换任何显式或通常自动配置的DataSource)。可以使用@AutoConfigureTestDatabase注释来覆盖这些设置。
如果您想加载完整的应用程序配置,但使用嵌入式数据库,则应考虑@SpringBootTest结合@AutoConfigureTestDatabase而不是此注释。
因此,您唯一需要的就是在pom文件中添加依赖项:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
这就是全部内容了。然而,Spring Boot规范还有两个有用的注意事项:
1. {{您无需提供任何连接URL}}。您只需要包含要使用的嵌入式数据库的构建依赖项。如果您在测试中使用此功能,则可能会注意到同一数据库被整个测试套件重复使用,而不管您使用的应用程序上下文数量如何。如果您想确保每个上下文都有一个单独的嵌入式数据库,则应将spring.datasource.generate-unique-name设置为true。
2. 另一个注意事项是:如果出于任何原因,您配置了嵌入式数据库的连接URL,请务必确保禁用数据库的自动关闭。如果您使用H2,则应使用DB_CLOSE_ON_EXIT=FALSE来禁用自动关闭。如果您使用HSQLDB,则应确保不使用shutdown=true。禁用数据库的自动关闭使Spring Boot控制何时关闭数据库,从而确保在不再需要访问数据库时仅关闭它。
这几乎是关于Spring Boot和嵌入式数据库的所有内容。除非您真正有意为应用程序运行时配置嵌入式数据库,否则我认为没有理由使用除test之外的依赖范围。信不信由你,H2 jar本身就占据着您的fat jar内部的1.8M。在微粒化的微服务、无服务器和Lambda函数的世界中,您放置在应用程序中的内容确实很重要。
我建议您检查@AutoConfigureTestDatabase中的选项。 我在@SpringBootTest中使用它,但也可以与其他一些注释一起使用,即@DataJpaTest,这两个都在上面提到:
@PropertySource("path/to/properties")
注解,现在它可以工作了,谢谢。 - Leonid Bor