簡體   English   中英

測試時將使用src / main / resources和src / test / resources目錄中的哪個application.yml

[英]Which application.yml that're in src/main/resources and src/test/resources directories will be used when testing

在Spring Boot Maven項目中,分別在src/main/resourcessrc/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.ymlsrc/test/resource/application.yml都存在
輸出:Hello Phil(測試),Andy(測試)

情況3: src/main/resource/application.ymlsrc/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.

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