1

我正在尝试使用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;

TestContextPropertySourcesPlaceholderConfigurer用另一个属性文件定义。

有趣的是,如果我从我的测试作品中删除<profiles>并激活配置文件:application.properties

spring.profiles.active: test

因此,看起来当我使用<profiles>Spring 时不会将application-test.properties文件加载到环境中。

问题:

  • 这是一个错误吗?
  • (如果不是)如何配置 Spring 以加载application-test.properties和使用<profiles>
  • 为什么这些方法不同?
4

1 回答 1

2

如果您在配置中指定配置文件,spring-boot-maven-plugin那么它们仅在您使用该插件执行应用程序时可用,即通过运行mvn spring-boot:run. 我怀疑,您的集成测试并非如此,因此它不起作用。

于 2016-01-08T22:31:59.207 回答