在运行时更改@PropertySource值

时间:2016-10-30 08:59:39

标签: java spring reflection junit spring-boot

当junit测试用例运行时,如何在运行时更改@PropertySource的值。例如,

我想替换下面的值,

@PropertySource(value = "file:${app.deploy.env}/sample/mine.properties", ignoreResourceNotFound = true)

value = "classpath:sample/mine.properties"
当junit测试运行时

1 个答案:

答案 0 :(得分:2)

如果你真的想要,你可以这样做,但我不建议你这样做。首先需要确定哪个PropertySource包含该值。由于您的示例中包含该注释,因此PropertySource将添加到常规注释中,可能作为第一个实例。

您可以将Environment注入要在ConfigurableEnvironment进行更改的托管bean中,并通过在环境中调用PropertySource来检索getMutablePropertySources()

说完了。为什么?如何更改应用程序的这些基本属性代表您的应用程序将会发生什么。看起来您正在使用Spring runner,并且您希望在不同的测试方法中使用不同的设置启动您的应用程序。如果这就是你想要做的事情,不要使用跑步者,而是自己管理上下文,这真的不是那么难。

例如,这里有JMS-related tests更改Environment以测试各种方案。您可以easily load the context with a specific set of keys@After method makes sure to shutdown the context for each test

我们在Spring Boot中使用了这种模式。事实上,我有一个JUnit规则,可以在我的待办事项清单上提供几个月的所有内容。