我正在尝试使用Spring Boot 1.3.0.RELEASE 中的新功能——通过以下配置激活配置文件spring-boot-maven-plugin
:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>test</profile>
</profiles>
</configuration>
<executions>
<execution>
<id>start-application</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-application</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
但在这种情况下,我的集成测试开始失败,因为IllegalArgumentException: Could not resolve placeholder 'spring.mail.host' in string value "${spring.mail.host}"
这个变量定义在src/main/resources/application-test.properties
:
spring.profiles: test
spring.mail.host: 127.0.0.1
我的测试如下所示:
@ContextConfiguration(
loader = AnnotationConfigContextLoader.class,
initializers = ConfigFileApplicationContextInitializer.class,
classes = TestContext.class
)
public class WhenAnonymousUserRegisterAccount extends AbstractTestNGSpringContextTests {
@Value("${spring.mail.host}")
private String mailHost;
TestContext
只PropertySourcesPlaceholderConfigurer
用另一个属性文件定义。
有趣的是,如果我从我的测试作品中删除<profiles>
并激活配置文件:application.properties
spring.profiles.active: test
因此,看起来当我使用<profiles>
Spring 时不会将application-test.properties
文件加载到环境中。
问题:
- 这是一个错误吗?
- (如果不是)如何配置 Spring 以加载
application-test.properties
和使用<profiles>
? - 为什么这些方法不同?