Leo*_*Bor 8 java mysql junit spring spring-boot
我有一个spring boot应用程序,它有几个@Entity类和@RepositoryRestResourcerepositort接口.现在我想编写一些测试,在那里我可以检查我是否可以使用这些存储库将新记录添加到我的数据库中,但我不想使用我配置的MySQL数据库,而是我想使用一些嵌入式数据库喜欢H2.目前我有一个application.properties文件,看起来像这样:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=qwerty123
Run Code Online (Sandbox Code Playgroud)
问题:如何配置我的应用程序以使用其他数据库进行测试?我的项目中没有xml,一切都基于注释.我试图定义@Configuration类 @Bean来创建DataSource,然后@ContextConfiguration在测试类上使用它和注释,但它说它无法加载上下文.
Bon*_*cía 15
如果您使用的是Maven项目,则可以将application.properties文件添加到您的项目中src/test/resources,例如使用以下内容.
# Create DDL
spring.jpa.hibernate.ddl-auto=create
# H2 in local file system allowing other simultaneous connections
spring.datasource.url=jdbc:h2:~/test;AUTO_SERVER=TRUE
Run Code Online (Sandbox Code Playgroud)
此外,您需要包含H2作为dependency(pom.xml):
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Spring Boot为测试提供了两个与JPA autoconfigs相关的魔术注释:@DataJpaTest和@AutoConfigureTestDatabase.javadoc说:
默认情况下,使用@DataJpaTest注释的测试将使用嵌入式内存数据库(替换任何显式或通常自动配置的DataSource).@AutoConfigureTestDatabase批注可用于覆盖这些设置.
如果您要加载完整的应用程序配置,但使用嵌入式数据库,则应考虑将@SpringBootTest与@AutoConfigureTestDatabase结合使用而不是此注释.
所以,你唯一需要的是你的pom文件中的依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
而已.但是,spring boot规范也有两个有用的警告:
您无需提供任何连接URL.您只需要包含要使用的嵌入式数据库的构建依赖项.如果您在测试中使用此功能,您可能会注意到整个测试套件都会重复使用相同的数据库,而不管您使用的应用程序上下文的数量.如果要确保每个上下文都有一个单独的嵌入式数据库,则应将spring.datasource.generate-unique-name设置为true.
还有一个:
如果由于某种原因,您确实为嵌入式数据库配置了连接URL,请注意确保禁用数据库的自动关闭.如果使用H2,则应使用DB_CLOSE_ON_EXIT = FALSE来执行此操作.如果使用HSQLDB,则应确保不使用shutdown = true.禁用数据库的自动关闭可以在数据库关闭时进行Spring Boot控制,从而确保在不再需要访问数据库时发生.
这几乎是您需要了解的有关Spring Boot和嵌入式DB的所有信息.test除非您实际上有意为应用程序运行时配置嵌入式数据库,否则我认为绝对没有理由使用依赖性范围.信不信由你的胖罐里面只有1.8毫升的H2罐.在粒度微服务,无服务器和lambda函数的世界中,你在应用程序中放置的内容确实很重要.
我还建议检查@AutoConfigureTestDatabase中的选项.我将它与@SpringBootTest一起使用,但它也可以与其他一些注释一起使用,即@DataJpaTest,两者都在上面提到:

| 归档时间: |
|
| 查看次数: |
19865 次 |
| 最近记录: |