在春季启动Maven项目中,application.yml
和src/main/resources
分别有src/test/resources
个文件。
运行测试用例时,似乎测试只会使用src/test/resources
目录中的文件。它不会加载两个文件并覆盖src/main/resources/application.yml
中的属性。
如果src/test/resources
目录中没有该文件,它将使用src/main/resources
目录中的文件。
Spring如何在这两个目录中加载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(主要),Andy(主要)
案例2:src/main/resource/application.yml
和src/test/resource/application.yml
都存在
输出:你好Phil(测试),Andy(测试)
案例3:src/main/resource/application.yml
和src/test/resource/application.yml
都存在并在name
中注释src/test/resource/application.yml
了
输出:
Error - java.lang.IllegalArgumentException: Could not resolve placeholder 'name' in value "${name}"
此测试似乎没有从src/main/resource/application.yml
读取属性,因此找不到name
属性。
答案 0 :(得分:0)
Spring检测到这两个目录,就像你说它根据状态和优先级确定要使用哪些配置。如果你想让spring使用特定的设置,你应该定义spring profiles
,它可以有专门的设置,也可以扩展默认设置。
答案 1 :(得分:0)
我正在使用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
,它应包含所有指定文件类型