如何配置我的Spring Boot應用程序,以便在運行單元測試時使用內存數據庫,例如H2/HSQL,但是當我運行Spring Boot應用程序時,它將使用生產數據庫[Postgre/MySQL]?在內存數據庫中配置特定的內存數據庫,以便在Spring中進行測試
回答
春季配置文件可用於此。這將是一個特定的方式:
有無環境的具體屬性文件:
application.properties:
spring.profiles.active: dev
application-dev.properties
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
應用-test.properties
spring.jpa.database: HSQL
同時擁有的MySQL和H2司機pom.xml
,像這樣:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
最後但並非最不重要的,註釋測試類,@ActiveProfiles("test")
。
@Sanjay有一種方法來說,但我覺得很困惑。你也可以同樣只有一個production
輪廓,當你在生產中是您啓用,是這樣的:
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
並且不指定任何東西。如果您在test
範圍內添加嵌入式數據庫,它將在您的測試中可用。如果使用默認配置文件運行測試(不進行任何自定義),它將找不到任何數據庫信息(因爲它們存儲在production
配置文件中)。在這種情況下,它會嘗試查找嵌入式數據庫併爲您啓動它。如果您需要更多的自定義出於某種原因,你可以有那些application-test.properties
(你需要添加ActiveProfiles("test")
到你的測試(S)
在我的場景中,我將在我的PC中有一個MySQL數據庫,在開發時在本地運行應用程序時會使用該數據庫。這就是爲什麼我認爲我們需要一個'dev'配置文件來運行應用程序,還有一個'test'配置文件來通過我的IDE運行測試。在這種情況下可以做任何簡化? – Sanjay
只需在您的MySQL DB中添加'application-dev.properties',並在您從IDE運行應用程序時啓用'dev'配置文件。 –
好吧,我的理解是上面的回答看起來適合這種情況,除非我可以跳過'test'配置文件和'@ ActiveProfile',如果'test'配置文件除了數據庫之外什麼也沒有。如果這聽起來不對,請告訴我。 – Sanjay
簡單的解決方案,如果有maven
建設:只需將一個application.properties
文件src/test/resources
之下,編輯適當的測試
Spring(引導)配置文件機制是一個非常強大的工具,它在範圍內遠遠超出了「在測試時間和運行時間之間交換設置」,儘管顯然,它可以那也是:)
另一種方法是添加註釋@AutoConfigureTestDatabase
給你測試類。 我的測試通常是這樣的:
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class MyRepositoryTest {
@Autowired
MyRepository repository;
@Test
public void test() throws Exception {
// Tests...
}
}
簡單的解決方案:
1)中的src/main /資源有application.properties(生產配置):
spring.datasource.url=jdbc:mysql://localhost:3306/somedb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
和應用測試。HSQL配置屬性如下:
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.database = HSQL
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect
spring.datasource.driverClassName = org.hsqldb.jdbcDriver
spring.datasource.url: jdbc:hsqldb:mem:scratchdb
spring.datasource.username = sa
spring.datasource.password =
2)如果您還沒有它,請在pom.xml中添加HSQL依賴項。
3)用@ActiveProfiles(「test」)註釋你的測試類。
在我的情況下工作就像魅力。
嘿,你如何設置hsql本身? –
Hi @AlexBondar。您可以在它之前使用該示例,但可以在AutoConfigureTestDatabase中使用replace = Replace.NONE – bpedroso
- 1. 在內存數據庫db和spring中進行集成測試jdbc
- 2. 如何在測試時配置內存數據庫?
- 3. Spring內存數據庫
- 4. 如何僅在內存中運行Django的測試數據庫?
- 5. 設置內存SQLite數據庫在Laravel 5.4中測試
- 6. Spring數據jpa知識庫內存中測試用例
- 7. 在內存中固定一個數據庫/將數據庫附加到內存數據庫中
- 8. 確定將數據存儲在內存或數據庫中
- 9. 用phpunit sqlite內存數據庫測試mysqli數據庫類
- 10. 單獨使用內存數據庫進行測試 - 如何?
- 11. 將內存分配給MySQL數據庫中的特定表
- 12. PostgreSQL在內存數據庫
- 13. 玩框架在內存中使用h2數據庫進行單元測試
- 14. 在內存中的SQLite數據庫
- 15. 運行測試在內存數據庫播放框架
- 16. 在數據庫中存儲配置文件特定的圖像
- 17. 在內存數據庫設計中
- 18. Datamapper在內存數據庫中
- 19. 在內存中有數據庫 - C
- 20. 在內存中休眠數據庫
- 21. derby在內存數據庫+ junit中
- 22. 將配置存儲在數據庫中
- 23. 內存數據庫vs圖數據庫
- 24. 用於在彈簧啓動應用程序中進行集成測試的內存數據庫配置(HSQLDB)
- 25. 使用測試數據填充內存數據庫的模式
- 26. 緩存內存中的數據庫內容以提高性能
- 27. 將數據存儲在數據庫中以便快速選擇
- 28. 在內存上存儲數據庫
- 29. 將數據保存在內存中而不是保存在數據庫中java
- 30. NHibernate的單元測試嘲笑/在內存數據庫
'dev'配置文件對我來說似乎很奇怪。這不是應該是「生產」嗎?在這種情況下,只需將該信息放在'application.properties'中,不需要'spring.profiles.active'。 –
我有一個單獨的'prod'配置文件。如果我們把'dev'信息放在* application.properties *中,那麼這些信息不會泄漏到'test'配置文件中? – Sanjay
我只是說你沒有回答這個問題。開發/測試在你的答案中令人困惑。我期望產品檔案,然後是測試檔案,但不是「開發」檔案。您也可以在生產中使用「prod」配置文件,並保留測試默認值。由於Spring Boot沒有找到任何具體的信息,它會使用嵌入式容器。 –