簡體   English   中英

Spring 引導配置文件屬性不適用於測試

[英]Spring Boot profile properties doesn't work with tests

Spring 引導版本 2.2.6。 我的情況是文件夾src/main/resources/中有幾個application-{profile}.yml文件,我不想使用 Maven 構建項目,例如mvn clean package -Dspring.profiles.active=dev

然后我在文件夾src/test/resources中只有application.yml文件,這應該是所有測試(IT/單元)的屬性文件。

現在,當我使用命令mvn clean package -Dspring.profiles.active=dev構建時,屬性src/main/resources/application-dev.ymlsrc/test/resources/application.yml被合並並用於測試。 那么在測試屬性中可能會有非常致命的配置,例如 Hibernate auto-ddl: create-drop。

一直在閱讀文檔,但我沒有找到任何邏輯為什么在這種情況下屬性文件被合並。 是否有任何好的做法可以強制測試始終使用某些屬性文件? 我認為僅在測試文件中使用一些注釋並不是最佳實踐,例如@TestPropertySource@ActiveProfiles ,因為當您忘記使用這些注釋時,情況再次相同。 所有測試是否有一些全局配置或其他更好的解決方案?

application.yml文件的優先級高於任何特定於環境的文件,例如application-dev.yml文件。 標准 inheritance 適用,因此您可以覆蓋特定配置文件 YAML 文件中的父屬性。

application.yml

server:
  port: 9090

spring:
  jpa:
    hibernate:
      ddl-auto: create-drop

application-dev.yml

spring:
  jpa:
    hibernate:
      ddl-auto: none

如果您使用dev配置文件運行,則spring.jpa.hibernate.ddl-auto參數的值為none

我知道 application.yml 在文件夾 /src/main 中具有更高的優先級,但它也從文件夾 /src/test 中接管有點奇怪。

是的,可以將配置制作成特定於配置文件的文件(ddl-auto:無),很難,我仍然對數據源有問題,不知何故 Spring 引導也在選擇 application-dev.ymls 數據源進行測試,這與其他方式不同那個 ddl-auto 屬性。

src/test/resources/application.yml

spring:
  datasource:
    url: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL

src/main/resources/application-dev.yml

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/db

暫無
暫無

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

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