在Spring Boot中使用@TestPropertySource覆盖@PropertySource

时间:2016-04-14 06:04:11

标签: java spring spring-boot spring-test

我有我的Spring Boot主类:

@SpringBootApplication
@PropertySource("file:/my/file/properties")
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
  //main method
}

我正在从外部文件中读取属性(使用@PropertySource)。现在,我有一个集成测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes= Application.class)
@WebIntegrationTest
@TestPropertySource("file:/my/test/file/properties") // <---
public class MyTest {
  //some tests
}

我需要使用另一个外部属性文件,该文件与@PropertySource类中的Application中指示的不同。出于这个原因,我添加了@TestPropertySource,但似乎此注释不会覆盖@PropertySource

我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:9)

以这种方式使用:

@TestPropertySource(locations = "classpath:test.properties")

并将测试属性文件放入src/test/resources

答案 1 :(得分:0)

在Java8中你可以重复&#34;注释如:

@PropertySource(value = "file:./src/main/resources/mydefault.properties")
@PropertySource(value = "file:./src/test/resources/override.properties", ignoreResourceNotFound = true)

这样,后者会覆盖第一个文件中的属性(如果可用)。