![](/img/trans.png)
[英]Are files in src/test/resources on classpath while application (src/main) is running?
[英]Which application.yml that're in src/main/resources and src/test/resources directories will be used when testing
在Spring Boot Maven項目中,分別在src/main/resources
和src/test/resources
有一個application.yml
文件。
運行測試用例時,似乎測試只會使用src/test/resources
目錄中的文件,它將不會加載兩個文件並覆蓋src/main/resources/application.yml
的屬性。 如果src/test/resources
目錄中沒有該文件,它將使用src/main/resources
目錄中的文件。
Spring Boot如何在這兩個目錄中加載application.yml
文件? 有什么規定? 或此動作取決於什么?
在哪里可以在線查找有關此信息的更多信息?
└───spring-boot-main-test-application-yaml
├───pom.xml
└───src
├───main
│ ├───java
│ ├───resources
│ ├───application.yml
│
├───test
├───java
├───resources
└─── application.yml
src/main/resource/application.yml
name: Phil(main)
sample:
name: Andy(main)
src/test/resource/application.yml
name: Phil(test)
sample:
name: Andy(test)
情況1: src/main/resource/application.yml
存在
輸出:Hello Phil(main),Andy(main)
情況2: src/main/resource/application.yml
和src/test/resource/application.yml
都存在
輸出:Hello Phil(測試),Andy(測試)
情況3: src/main/resource/application.yml
和src/test/resource/application.yml
都存在,並在src/test/resource/application.yml
注釋掉name
輸出:
Error - java.lang.IllegalArgumentException: Could not resolve placeholder 'name' in value "${name}"
似乎此測試未從src/main/resource/application.yml
讀取屬性,因此無法找到name
屬性。
Spring會檢測到這兩個目錄,就像您說的那樣,它會根據狀態和優先級確定要使用的配置。 如果希望彈簧使用特定設置,則應定義spring profiles
,該spring profiles
可以具有專門的設置以及擴展的默認設置。
我正在使用yml文件,並確保在構建應用程序時加載了這些屬性文件,因此在pom.xml中最好具有以下配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.jks</include>
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
....
</build>
確保運行構建(如果需要,請從頭開始,例如刪除.m2中的存儲庫文件夾-可能根本不需要)。現在檢查target/classes
,其中應包含所有指定類型的文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.