使用 YAML 的 Spring @PropertySource

新手上路,请多包涵

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 的优点呢?

原文由 checketts 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 495
2 个回答

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()
        }
    }

到上下文。

原文由 Ola Sundell 发布,翻译遵循 CC BY-SA 4.0 许可协议

@PropertySource 仅支持属性文件(这是 Spring 的限制,而不是 Boot 本身)。随意 在 JIRA 中打开功能请求票。

原文由 Dave Syer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题