如何覆盖Spring @PropertySource顺序?

问题描述 投票:0回答:1

问题是我的数据库配置文件具有“user”值,并且我正在使用PropertySource并尝试获取该值,但SystemEnvironmentPropertySource也具有“user”值的优先级。

那么如何指定DBConfiguration类使用database.config的用户呢?

P.S - 我无法更改配置名称,因为许多应用程序正在使用它。

@PropertySource("file:/config/database.config")
public class DBConfiguration {
  @Value("${user}")
  private String user;
  ..... 
}
java spring config
1个回答
0
投票

我的解决方法是使用

ApplicationContextInitializer
并明确定义顺序:

open class OverrideApplicationContextInitializer: ApplicationContextInitializer<ConfigurableApplicationContext> {
    override fun initialize(applicationContext: ConfigurableApplicationContext) {
        if (applicationContext.environment.activeProfiles.contains("prod")) {
            try {
                val properties = Properties()
                properties.load(this.javaClass.getResourceAsStream("/my-prod.properties"))                applicationContext.environment.propertySources.addLast(PropertiesPropertySource("my-prod", properties))
            } catch (e: IOException) {
                logger.error(e.message, e)
            }
        }
    }

    companion object {
        private val logger = LoggerFactory.getLogger(OverrideApplicationContextInitializer::class.java)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.