使用<profiles>激活配置文件时,不会加载application-test.properties

时间:2016-01-08 22:26:06

标签: spring-boot spring-boot-maven-plugin

我正在尝试使用new feature from 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>
  • 为什么这些方法不同?

1 个答案:

答案 0 :(得分:2)

如果您在spring-boot-maven-plugin的配置中指定配置文件,那么只有在您使用该插件执行应用程序时,它们才可用,即运行mvn spring-boot:run。我怀疑,这不是你的集成测试的情况,因此它不起作用。