[英]Use embedded database for test in spring boot
我有一個spring boot應用程序,它有幾個@Entity
類和@RepositoryRestResource
repositort接口。 現在我想編寫一些測試,在那里我可以檢查我是否可以使用這些存儲庫將新記錄添加到我的數據庫中,但我不想使用我配置的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
問題:如何配置我的應用程序以使用其他數據庫進行測試? 我的項目中沒有xml,一切都基於注釋。 我試圖用@Bean
定義@Configuration
類來創建DataSource
,然后在測試類上使用@ContextConfiguration
注釋,但它說它無法加載上下文。
如果您使用的是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
此外,您需要包含H2作為依賴項( pom.xml
):
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
Spring Boot提供了2個與JPA autoconfigs相關的魔術注釋: @DataJpaTest
和@AutoConfigureTestDatabase
。 javadoc說:
默認情況下,使用@DataJpaTest注釋的測試將使用嵌入式內存數據庫(替換任何顯式或通常自動配置的DataSource)。 @AutoConfigureTestDatabase批注可用於覆蓋這些設置。
如果您要加載完整的應用程序配置,但使用嵌入式數據庫,則應考慮將@SpringBootTest與@AutoConfigureTestDatabase結合使用而不是此注釋。
所以,你唯一需要的是你的pom文件中的依賴:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
而已。 但是,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,兩者都在上面提到:
您將需要使用Spring配置文件 - https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-set-active-spring-profiles
您將使用“spring.profiles.active = development”定義活動配置文件,然后在開發配置文件中包含H2。
這些示例使用YAML,但它們也適用於標准屬性文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.