簡體   English   中英

在Spring Boot中的同一個pom.xml中管理H2和Postgres

[英]Manage H2 and Postgres in same pom.xml in Spring Boot

我正在使用Spring Boot開發一個微服務應用程序。 我的應用程序將用於生產配置Postgres DB和Spring Boot自動測試H2 DB。 因此,我的pom.xml包含兩個依賴項(H2 + Postgres)。 我嘗試將H2依賴關系與tes范圍相關聯,Postgres與運行時關聯如下:

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>test</scope>
        </dependency>

我可以看到運行mvn測試時 ,Spring Boot默認選擇postgres數據庫,這在我的單元測試環境中不存在。 這就是為什么我更喜歡使用H2來運行單元測試的原因。

有沒有一種正確的方法來告訴spring boot使用H2進行測試而Postgres使用其他方法?

我不知道是否使用不同的application.properties文件(一個在src / main / resources中,另一個在src / test / resources中)可以解決問題。

您應該知道有多個類路徑,例如:

  1. 編譯時類路徑,
  2. 運行時類路徑,
  3. 測試類路徑。

當您使用<scope>runtime</scope> ,依賴項將在運行時類路徑中作為測試類路徑使用 ,如文檔所述

此范圍表示編譯不需要依賴項,但是用於執行。 它位於運行時和測試類路徑中,但不是編譯類路徑。

這意味着即使在執行測試時,如果使用<scope>runtime</scope> ,Postgres仍會在您的類路徑上。


通過提供兩個單獨的application.properties ,您提到的解決方案是正確的選擇。

src/main/resources/application.properties ,您可以像這樣配置數據源:

spring.datasource.url=jdbc:postgresql://localhost:5432/mydatabase

src/test/resources/application.properties ,您可以像這樣配置數據源:

spring.datasource.url=jdbc:h2:mydatabase

如果需要更細粒度的控件,可以使用Spring配置文件。 例如,您可以使用名為“testdb”的配置文件,然后使用@ActiveProfiles("testdb")注釋您的測試。

現在,您可以創建一個名為application-testdb.properties的文件,並添加設置測試數據庫所需的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM