一尘不染

使用YAML的Spring @PropertySource

spring-boot

Spring
Boot允许我们用YAML等效项替换application.properties文件。但是,我的测试似乎遇到了障碍。如果我对我的注释TestConfiguration(一个简单的Java配置),则需要一个属性文件。

例如,这不起作用: @PropertySource(value = "classpath:application-test.yml")

如果我的YAML文件中有此文件:

db:
  url: jdbc:oracle:thin:@pathToMyDb
  username: someUser
  password: fakePassword

我将通过以下方式利用这些值:

@Value("${db.username}") String username

但是,我最终遇到这样的错误:

Could not resolve placeholder 'db.username' in string value "${db.username}"

如何在测试中也利用YAML优势?


阅读 286

收藏
2020-05-30

共1个答案

一尘不染

Spring-boot为此提供了一个帮助器,只需添加

@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)

在测试类或抽象测试超类的顶部。

编辑:我五年前写了这个答案。它不适用于最新版本的Spring Boot。这就是我现在要做的(如有必要,请将Kotlin转换为Java):

@TestPropertySource(locations=["classpath:application.yml"])
@ContextConfiguration(
        initializers=[ConfigFileApplicationContextInitializer::class]
)

添加到顶部,然后

    @Configuration
    open class TestConfig {

        @Bean
        open fun propertiesResolver(): PropertySourcesPlaceholderConfigurer {
            return PropertySourcesPlaceholderConfigurer()
        }
    }

到上下文。

2020-05-30